PM / Hibernate: Refactor and simplify hibernation_snapshot() code
authorSrivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Tue, 22 Nov 2011 22:20:31 +0000 (23:20 +0100)
committerRafael J. Wysocki <rjw@sisk.pl>
Wed, 23 Nov 2011 20:13:41 +0000 (21:13 +0100)
The goto statements in hibernation_snapshot() are a bit complex.
Refactor the code to remove some of them, thereby simplifying the
implementation.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
kernel/power/hibernate.c

index a6b0503..ebf62c3 100644 (file)
@@ -333,7 +333,7 @@ static int create_image(int platform_mode)
  */
 int hibernation_snapshot(int platform_mode)
 {
-       pm_message_t msg = PMSG_RECOVER;
+       pm_message_t msg;
        int error;
 
        error = platform_begin(platform_mode);
@@ -362,26 +362,26 @@ int hibernation_snapshot(int platform_mode)
 
        error = dpm_prepare(PMSG_FREEZE);
        if (error) {
-               dpm_complete(msg);
+               dpm_complete(PMSG_RECOVER);
                goto Cleanup;
        }
 
        suspend_console();
        pm_restrict_gfp_mask();
+
        error = dpm_suspend(PMSG_FREEZE);
-       if (error)
-               goto Recover_platform;
 
-       if (hibernation_test(TEST_DEVICES))
-               goto Recover_platform;
+       if (error || hibernation_test(TEST_DEVICES))
+               platform_recover(platform_mode);
+       else
+               error = create_image(platform_mode);
 
-       error = create_image(platform_mode);
        /*
-        * Control returns here (1) after the image has been created or the
+        * In the case that we call create_image() above, the control
+        * returns here (1) after the image has been created or the
         * image creation has failed and (2) after a successful restore.
         */
 
- Resume_devices:
        /* We may need to release the preallocated image pages here. */
        if (error || !in_suspend)
                swsusp_free();
@@ -399,10 +399,6 @@ int hibernation_snapshot(int platform_mode)
        platform_end(platform_mode);
        return error;
 
- Recover_platform:
-       platform_recover(platform_mode);
-       goto Resume_devices;
-
  Cleanup:
        swsusp_free();
        goto Close;