xen: improve error handling in do_suspend.
commitf180b871d6cbcaaf9349075afb515081de073acb
authorIan Campbell <ian.campbell@citrix.com>
Tue, 1 Dec 2009 11:47:14 +0000 (1 11:47 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Dec 2009 22:04:52 +0000 (18 14:04 -0800)
tree339d77532f719692cd63cab4286d79b926941136
parent0bf7bb9861a419c63055293ddec67329165f8d84
xen: improve error handling in do_suspend.

commit 65f63384b391bf4d384327d8a7c6de9860290b5c upstream.

The existing error handling has a few issues:
- If freeze_processes() fails it exits with shutting_down = SHUTDOWN_SUSPEND.
- If dpm_suspend_noirq() fails it exits without resuming xenbus.
- If stop_machine() fails it exits without resuming xenbus or calling
  dpm_resume_end().
- xs_suspend()/xs_resume() and dpm_suspend_noirq()/dpm_resume_noirq() were not
  nested in the obvious way.

Fix by ensuring each failure case goto's the correct label. Treat a failure of
stop_machine() as a cancelled suspend in order to follow the correct resume
path.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/xen/manage.c