diff options
Diffstat (limited to 'kernel/sys.c')
-rw-r--r-- | kernel/sys.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index 8b71cef3bf1a..6e81aa7e4688 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -2114,7 +2114,6 @@ int orderly_poweroff(bool force) | |||
2114 | NULL | 2114 | NULL |
2115 | }; | 2115 | }; |
2116 | int ret = -ENOMEM; | 2116 | int ret = -ENOMEM; |
2117 | struct subprocess_info *info; | ||
2118 | 2117 | ||
2119 | if (argv == NULL) { | 2118 | if (argv == NULL) { |
2120 | printk(KERN_WARNING "%s failed to allocate memory for \"%s\"\n", | 2119 | printk(KERN_WARNING "%s failed to allocate memory for \"%s\"\n", |
@@ -2122,18 +2121,16 @@ int orderly_poweroff(bool force) | |||
2122 | goto out; | 2121 | goto out; |
2123 | } | 2122 | } |
2124 | 2123 | ||
2125 | info = call_usermodehelper_setup(argv[0], argv, envp, GFP_ATOMIC); | 2124 | ret = call_usermodehelper_fns(argv[0], argv, envp, UMH_NO_WAIT, |
2126 | if (info == NULL) { | 2125 | NULL, argv_cleanup, NULL); |
2127 | argv_free(argv); | 2126 | out: |
2128 | goto out; | 2127 | if (likely(!ret)) |
2129 | } | 2128 | return 0; |
2130 | |||
2131 | call_usermodehelper_setfns(info, NULL, argv_cleanup, NULL); | ||
2132 | 2129 | ||
2133 | ret = call_usermodehelper_exec(info, UMH_NO_WAIT); | 2130 | if (ret == -ENOMEM) |
2131 | argv_free(argv); | ||
2134 | 2132 | ||
2135 | out: | 2133 | if (force) { |
2136 | if (ret && force) { | ||
2137 | printk(KERN_WARNING "Failed to start orderly shutdown: " | 2134 | printk(KERN_WARNING "Failed to start orderly shutdown: " |
2138 | "forcing the issue\n"); | 2135 | "forcing the issue\n"); |
2139 | 2136 | ||