[PATCH] swsusp: fix error handling and cleanups

Drop printing during normal boot (when no image exists in swap), print
message when drivers fail, fix error paths and consolidate near-identical
functions in disk.c (and functions with just one statement).

Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Pavel Machek
2005-09-03 15:57:05 -07:00
committed by Linus Torvalds
parent dd5d666b79
commit 99dc7d63e0
2 changed files with 22 additions and 35 deletions

View File

@@ -112,24 +112,12 @@ static inline void platform_finish(void)
}
}
static void finish(void)
{
device_resume();
platform_finish();
thaw_processes();
enable_nonboot_cpus();
pm_restore_console();
}
static int prepare_processes(void)
{
int error;
pm_prepare_console();
sys_sync();
disable_nonboot_cpus();
if (freeze_processes()) {
@@ -162,15 +150,6 @@ static void unprepare_processes(void)
pm_restore_console();
}
static int prepare_devices(void)
{
int error;
if ((error = device_suspend(PMSG_FREEZE)))
printk("Some devices failed to suspend\n");
return error;
}
/**
* pm_suspend_disk - The granpappy of power management.
*
@@ -187,17 +166,14 @@ int pm_suspend_disk(void)
error = prepare_processes();
if (error)
return error;
error = prepare_devices();
error = device_suspend(PMSG_FREEZE);
if (error) {
printk("Some devices failed to suspend\n");
unprepare_processes();
return error;
}
pr_debug("PM: Attempting to suspend to disk.\n");
if (pm_disk_mode == PM_DISK_FIRMWARE)
return pm_ops->enter(PM_SUSPEND_DISK);
pr_debug("PM: snapshotting memory.\n");
in_suspend = 1;
if ((error = swsusp_suspend()))
@@ -208,11 +184,20 @@ int pm_suspend_disk(void)
error = swsusp_write();
if (!error)
power_down(pm_disk_mode);
else {
/* swsusp_write can not fail in device_resume,
no need to do second device_resume */
swsusp_free();
unprepare_processes();
return error;
}
} else
pr_debug("PM: Image restored successfully.\n");
swsusp_free();
Done:
finish();
device_resume();
unprepare_processes();
return error;
}
@@ -274,15 +259,17 @@ static int software_resume(void)
pr_debug("PM: Preparing devices for restore.\n");
if ((error = prepare_devices()))
if ((error = device_suspend(PMSG_FREEZE))) {
printk("Some devices failed to suspend\n");
goto Free;
}
mb();
pr_debug("PM: Restoring saved image.\n");
swsusp_resume();
pr_debug("PM: Restore failed, recovering.n");
finish();
device_resume();
Free:
swsusp_free();
Cleanup: