diff options
-rw-r--r-- | drivers/net/tun.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 74752159ec34..5eadb7a1ad7b 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1447,12 +1447,13 @@ static struct sk_buff *tun_ring_recv(struct tun_file *tfile, int noblock, { DECLARE_WAITQUEUE(wait, current); struct sk_buff *skb = NULL; + int error = 0; skb = skb_array_consume(&tfile->tx_array); if (skb) goto out; if (noblock) { - *err = -EAGAIN; + error = -EAGAIN; goto out; } @@ -1464,11 +1465,11 @@ static struct sk_buff *tun_ring_recv(struct tun_file *tfile, int noblock, if (skb) break; if (signal_pending(current)) { - *err = -ERESTARTSYS; + error = -ERESTARTSYS; break; } if (tfile->socket.sk->sk_shutdown & RCV_SHUTDOWN) { - *err = -EFAULT; + error = -EFAULT; break; } @@ -1479,6 +1480,7 @@ static struct sk_buff *tun_ring_recv(struct tun_file *tfile, int noblock, remove_wait_queue(&tfile->wq.wait, &wait); out: + *err = error; return skb; } |