xen: improve error handling in do_suspend.
authorIan Campbell <ian.campbell@citrix.com>
Tue, 1 Dec 2009 11:47:14 +0000 (11:47 +0000)
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Thu, 3 Dec 2009 19:14:56 +0000 (11:14 -0800)
commit65f63384b391bf4d384327d8a7c6de9860290b5c
treed42741a7582839ed8740b9cfb99416f2fcf46a6a
parentfed5ea87e02aaf902ff38c65b4514233db03dc09
xen: improve error handling in do_suspend.

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>
Cc: Stable Kernel <stable@kernel.org>
drivers/xen/manage.c