diff options
Diffstat (limited to 'arch/um/drivers')
| -rw-r--r-- | arch/um/drivers/net_kern.c | 2 | ||||
| -rw-r--r-- | arch/um/drivers/net_user.c | 2 | ||||
| -rw-r--r-- | arch/um/drivers/slip_user.c | 12 | ||||
| -rw-r--r-- | arch/um/drivers/slirp_user.c | 15 | ||||
| -rw-r--r-- | arch/um/drivers/ubd_user.c | 3 |
5 files changed, 8 insertions, 26 deletions
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index 73681f14f9..3c6c44ca1f 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c | |||
| @@ -98,10 +98,10 @@ static int uml_net_rx(struct net_device *dev) | |||
| 98 | if (pkt_len > 0) { | 98 | if (pkt_len > 0) { |
| 99 | skb_trim(skb, pkt_len); | 99 | skb_trim(skb, pkt_len); |
| 100 | skb->protocol = (*lp->protocol)(skb); | 100 | skb->protocol = (*lp->protocol)(skb); |
| 101 | netif_rx(skb); | ||
| 102 | 101 | ||
| 103 | lp->stats.rx_bytes += skb->len; | 102 | lp->stats.rx_bytes += skb->len; |
| 104 | lp->stats.rx_packets++; | 103 | lp->stats.rx_packets++; |
| 104 | netif_rx(skb); | ||
| 105 | return pkt_len; | 105 | return pkt_len; |
| 106 | } | 106 | } |
| 107 | 107 | ||
diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c index 90d7f2e8ea..29185cad9f 100644 --- a/arch/um/drivers/net_user.c +++ b/arch/um/drivers/net_user.c | |||
| @@ -201,7 +201,7 @@ static int change_tramp(char **argv, char *output, int output_len) | |||
| 201 | close(fds[1]); | 201 | close(fds[1]); |
| 202 | 202 | ||
| 203 | if (pid > 0) | 203 | if (pid > 0) |
| 204 | CATCH_EINTR(err = waitpid(pid, NULL, 0)); | 204 | helper_wait(pid, 0, "change_tramp"); |
| 205 | return pid; | 205 | return pid; |
| 206 | } | 206 | } |
| 207 | 207 | ||
diff --git a/arch/um/drivers/slip_user.c b/arch/um/drivers/slip_user.c index 5f06204d68..b8711e50da 100644 --- a/arch/um/drivers/slip_user.c +++ b/arch/um/drivers/slip_user.c | |||
| @@ -77,7 +77,7 @@ static int slip_tramp(char **argv, int fd) | |||
| 77 | { | 77 | { |
| 78 | struct slip_pre_exec_data pe_data; | 78 | struct slip_pre_exec_data pe_data; |
| 79 | char *output; | 79 | char *output; |
| 80 | int status, pid, fds[2], err, output_len; | 80 | int pid, fds[2], err, output_len; |
| 81 | 81 | ||
| 82 | err = os_pipe(fds, 1, 0); | 82 | err = os_pipe(fds, 1, 0); |
| 83 | if (err < 0) { | 83 | if (err < 0) { |
| @@ -109,15 +109,7 @@ static int slip_tramp(char **argv, int fd) | |||
| 109 | read_output(fds[0], output, output_len); | 109 | read_output(fds[0], output, output_len); |
| 110 | printk("%s", output); | 110 | printk("%s", output); |
| 111 | 111 | ||
| 112 | CATCH_EINTR(err = waitpid(pid, &status, 0)); | 112 | err = helper_wait(pid, 0, argv[0]); |
| 113 | if (err < 0) | ||
| 114 | err = errno; | ||
| 115 | else if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { | ||
| 116 | printk(UM_KERN_ERR "'%s' didn't exit with status 0\n", argv[0]); | ||
| 117 | err = -EINVAL; | ||
| 118 | } | ||
| 119 | else err = 0; | ||
| 120 | |||
| 121 | close(fds[0]); | 113 | close(fds[0]); |
| 122 | 114 | ||
| 123 | out_free: | 115 | out_free: |
diff --git a/arch/um/drivers/slirp_user.c b/arch/um/drivers/slirp_user.c index 1865089ff4..89c1be225f 100644 --- a/arch/um/drivers/slirp_user.c +++ b/arch/um/drivers/slirp_user.c | |||
| @@ -79,7 +79,7 @@ out: | |||
| 79 | static void slirp_close(int fd, void *data) | 79 | static void slirp_close(int fd, void *data) |
| 80 | { | 80 | { |
| 81 | struct slirp_data *pri = data; | 81 | struct slirp_data *pri = data; |
| 82 | int status,err; | 82 | int err; |
| 83 | 83 | ||
| 84 | close(fd); | 84 | close(fd); |
| 85 | close(pri->slave); | 85 | close(pri->slave); |
| @@ -98,18 +98,9 @@ static void slirp_close(int fd, void *data) | |||
| 98 | "(%d)\n", pri->pid, errno); | 98 | "(%d)\n", pri->pid, errno); |
| 99 | } | 99 | } |
| 100 | #endif | 100 | #endif |
| 101 | 101 | err = helper_wait(pri->pid, 1, "slirp_close"); | |
| 102 | CATCH_EINTR(err = waitpid(pri->pid, &status, WNOHANG)); | 102 | if (err < 0) |
| 103 | if (err < 0) { | ||
| 104 | printk(UM_KERN_ERR "slirp_close: waitpid returned %d\n", errno); | ||
| 105 | return; | ||
| 106 | } | ||
| 107 | |||
| 108 | if (err == 0) { | ||
| 109 | printk(UM_KERN_ERR "slirp_close: process %d has not exited\n", | ||
| 110 | pri->pid); | ||
| 111 | return; | 103 | return; |
| 112 | } | ||
| 113 | 104 | ||
| 114 | pri->pid = -1; | 105 | pri->pid = -1; |
| 115 | } | 106 | } |
diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c index 41d254bd38..48fc7452bc 100644 --- a/arch/um/drivers/ubd_user.c +++ b/arch/um/drivers/ubd_user.c | |||
| @@ -49,8 +49,7 @@ int start_io_thread(unsigned long sp, int *fd_out) | |||
| 49 | goto out_close; | 49 | goto out_close; |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM | SIGCHLD, | 52 | pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM, NULL); |
| 53 | NULL); | ||
| 54 | if(pid < 0){ | 53 | if(pid < 0){ |
| 55 | err = -errno; | 54 | err = -errno; |
| 56 | printk("start_io_thread - clone failed : errno = %d\n", errno); | 55 | printk("start_io_thread - clone failed : errno = %d\n", errno); |
