diff options
author | Pavel Machek <pavel@ucw.cz> | 2005-06-25 17:55:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-25 19:24:33 -0400 |
commit | 620b03276488c3cf103caf1e326bd21f00d3df84 (patch) | |
tree | e2de713c76ddb42b091305b88aa7ca4938081789 /kernel | |
parent | 5ce47e59c9688d8480ae41100117d8188c191401 (diff) |
[PATCH] properly stop devices before poweroff
Without this patch, Linux provokes emergency disk shutdowns and
similar nastiness. It was in SuSE kernels for some time, IIRC.
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sys.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index da24bc1292db..dac10161ca23 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -405,6 +405,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user | |||
405 | case LINUX_REBOOT_CMD_HALT: | 405 | case LINUX_REBOOT_CMD_HALT: |
406 | notifier_call_chain(&reboot_notifier_list, SYS_HALT, NULL); | 406 | notifier_call_chain(&reboot_notifier_list, SYS_HALT, NULL); |
407 | system_state = SYSTEM_HALT; | 407 | system_state = SYSTEM_HALT; |
408 | device_suspend(PMSG_SUSPEND); | ||
408 | device_shutdown(); | 409 | device_shutdown(); |
409 | printk(KERN_EMERG "System halted.\n"); | 410 | printk(KERN_EMERG "System halted.\n"); |
410 | machine_halt(); | 411 | machine_halt(); |
@@ -415,6 +416,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user | |||
415 | case LINUX_REBOOT_CMD_POWER_OFF: | 416 | case LINUX_REBOOT_CMD_POWER_OFF: |
416 | notifier_call_chain(&reboot_notifier_list, SYS_POWER_OFF, NULL); | 417 | notifier_call_chain(&reboot_notifier_list, SYS_POWER_OFF, NULL); |
417 | system_state = SYSTEM_POWER_OFF; | 418 | system_state = SYSTEM_POWER_OFF; |
419 | device_suspend(PMSG_SUSPEND); | ||
418 | device_shutdown(); | 420 | device_shutdown(); |
419 | printk(KERN_EMERG "Power down.\n"); | 421 | printk(KERN_EMERG "Power down.\n"); |
420 | machine_power_off(); | 422 | machine_power_off(); |
@@ -431,6 +433,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user | |||
431 | 433 | ||
432 | notifier_call_chain(&reboot_notifier_list, SYS_RESTART, buffer); | 434 | notifier_call_chain(&reboot_notifier_list, SYS_RESTART, buffer); |
433 | system_state = SYSTEM_RESTART; | 435 | system_state = SYSTEM_RESTART; |
436 | device_suspend(PMSG_FREEZE); | ||
434 | device_shutdown(); | 437 | device_shutdown(); |
435 | printk(KERN_EMERG "Restarting system with command '%s'.\n", buffer); | 438 | printk(KERN_EMERG "Restarting system with command '%s'.\n", buffer); |
436 | machine_restart(buffer); | 439 | machine_restart(buffer); |