asmlinkage int swsusp_save(void)
 {
-       int error = 0;
-
-       if ((error = swsusp_swap_check())) {
-               printk(KERN_ERR "swsusp: FATAL: cannot find swap device, try "
-                               "swapon -a!\n");
-               return error;
-       }
        return suspend_prepare_image();
 }
 
         * at resume time, and evil weirdness ensues.
         */
        if ((error = device_power_down(PMSG_FREEZE))) {
-               printk(KERN_ERR "Some devices failed to power down, aborting suspend\n");
                local_irq_enable();
-               swsusp_free();
                return error;
        }
+
+       if ((error = swsusp_swap_check())) {
+               printk(KERN_ERR "swsusp: FATAL: cannot find swap device, try "
+                               "swapon -a!\n");
+               local_irq_enable();
+               return error;
+       }
+
        save_processor_state();
        if ((error = swsusp_arch_suspend()))
-               swsusp_free();
+               printk("Error %d suspending\n", error);
        /* Restore control flow magically appears here */
        restore_processor_state();
        BUG_ON (nr_copy_pages_check != nr_copy_pages);
 static const char * sanity_check(void)
 {
        dump_info();
-       if(swsusp_info.version_code != LINUX_VERSION_CODE)
+       if (swsusp_info.version_code != LINUX_VERSION_CODE)
                return "kernel version";
-       if(swsusp_info.num_physpages != num_physpages)
+       if (swsusp_info.num_physpages != num_physpages)
                return "memory size";
        if (strcmp(swsusp_info.uts.sysname,system_utsname.sysname))
                return "system type";