提交 3d26dcf7 编写于 作者: A Andi Kleen 提交者: Linus Torvalds

kernel/sys.c: clean up sys_shutdown exit path

Impact: cleanup, fix

Clean up sys_shutdown() exit path.  Factor out common code.  Return
correct error code instead of always 0 on failure.
Signed-off-by: NAndi Kleen <ak@linux.intel.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 4cafbd0b
...@@ -360,6 +360,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, ...@@ -360,6 +360,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
void __user *, arg) void __user *, arg)
{ {
char buffer[256]; char buffer[256];
int ret = 0;
/* We only trust the superuser with rebooting the system. */ /* We only trust the superuser with rebooting the system. */
if (!capable(CAP_SYS_BOOT)) if (!capable(CAP_SYS_BOOT))
...@@ -397,7 +398,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, ...@@ -397,7 +398,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
kernel_halt(); kernel_halt();
unlock_kernel(); unlock_kernel();
do_exit(0); do_exit(0);
break; panic("cannot halt");
case LINUX_REBOOT_CMD_POWER_OFF: case LINUX_REBOOT_CMD_POWER_OFF:
kernel_power_off(); kernel_power_off();
...@@ -417,29 +418,22 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, ...@@ -417,29 +418,22 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
#ifdef CONFIG_KEXEC #ifdef CONFIG_KEXEC
case LINUX_REBOOT_CMD_KEXEC: case LINUX_REBOOT_CMD_KEXEC:
{ ret = kernel_kexec();
int ret; break;
ret = kernel_kexec();
unlock_kernel();
return ret;
}
#endif #endif
#ifdef CONFIG_HIBERNATION #ifdef CONFIG_HIBERNATION
case LINUX_REBOOT_CMD_SW_SUSPEND: case LINUX_REBOOT_CMD_SW_SUSPEND:
{ ret = hibernate();
int ret = hibernate(); break;
unlock_kernel();
return ret;
}
#endif #endif
default: default:
unlock_kernel(); ret = -EINVAL;
return -EINVAL; break;
} }
unlock_kernel(); unlock_kernel();
return 0; return ret;
} }
static void deferred_cad(struct work_struct *dummy) static void deferred_cad(struct work_struct *dummy)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册