diff options
Diffstat (limited to 'arch/um/kernel/helper.c')
| -rw-r--r-- | arch/um/kernel/helper.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/um/kernel/helper.c b/arch/um/kernel/helper.c index f83e1e8e2392..33fb0bd3b11a 100644 --- a/arch/um/kernel/helper.c +++ b/arch/um/kernel/helper.c | |||
| @@ -85,8 +85,8 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, | |||
| 85 | data.fd = fds[1]; | 85 | data.fd = fds[1]; |
| 86 | pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data); | 86 | pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data); |
| 87 | if(pid < 0){ | 87 | if(pid < 0){ |
| 88 | printk("run_helper : clone failed, errno = %d\n", errno); | ||
| 89 | ret = -errno; | 88 | ret = -errno; |
| 89 | printk("run_helper : clone failed, errno = %d\n", errno); | ||
| 90 | goto out_close; | 90 | goto out_close; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| @@ -122,7 +122,7 @@ int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, | |||
| 122 | unsigned long *stack_out, int stack_order) | 122 | unsigned long *stack_out, int stack_order) |
| 123 | { | 123 | { |
| 124 | unsigned long stack, sp; | 124 | unsigned long stack, sp; |
| 125 | int pid, status; | 125 | int pid, status, err; |
| 126 | 126 | ||
| 127 | stack = alloc_stack(stack_order, um_in_interrupt()); | 127 | stack = alloc_stack(stack_order, um_in_interrupt()); |
| 128 | if(stack == 0) return(-ENOMEM); | 128 | if(stack == 0) return(-ENOMEM); |
| @@ -130,16 +130,18 @@ int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags, | |||
| 130 | sp = stack + (page_size() << stack_order) - sizeof(void *); | 130 | sp = stack + (page_size() << stack_order) - sizeof(void *); |
| 131 | pid = clone(proc, (void *) sp, flags | SIGCHLD, arg); | 131 | pid = clone(proc, (void *) sp, flags | SIGCHLD, arg); |
| 132 | if(pid < 0){ | 132 | if(pid < 0){ |
| 133 | err = -errno; | ||
| 133 | printk("run_helper_thread : clone failed, errno = %d\n", | 134 | printk("run_helper_thread : clone failed, errno = %d\n", |
| 134 | errno); | 135 | errno); |
| 135 | return(-errno); | 136 | return err; |
| 136 | } | 137 | } |
| 137 | if(stack_out == NULL){ | 138 | if(stack_out == NULL){ |
| 138 | CATCH_EINTR(pid = waitpid(pid, &status, 0)); | 139 | CATCH_EINTR(pid = waitpid(pid, &status, 0)); |
| 139 | if(pid < 0){ | 140 | if(pid < 0){ |
| 141 | err = -errno; | ||
| 140 | printk("run_helper_thread - wait failed, errno = %d\n", | 142 | printk("run_helper_thread - wait failed, errno = %d\n", |
| 141 | errno); | 143 | errno); |
| 142 | pid = -errno; | 144 | pid = err; |
| 143 | } | 145 | } |
| 144 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) | 146 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) |
| 145 | printk("run_helper_thread - thread returned status " | 147 | printk("run_helper_thread - thread returned status " |
| @@ -156,8 +158,8 @@ int helper_wait(int pid) | |||
| 156 | 158 | ||
| 157 | CATCH_EINTR(ret = waitpid(pid, NULL, WNOHANG)); | 159 | CATCH_EINTR(ret = waitpid(pid, NULL, WNOHANG)); |
| 158 | if(ret < 0){ | 160 | if(ret < 0){ |
| 161 | ret = -errno; | ||
| 159 | printk("helper_wait : waitpid failed, errno = %d\n", errno); | 162 | printk("helper_wait : waitpid failed, errno = %d\n", errno); |
| 160 | return(-errno); | ||
| 161 | } | 163 | } |
| 162 | return(ret); | 164 | return(ret); |
| 163 | } | 165 | } |
