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, | |||
| 1447 | { | 1447 | { |
| 1448 | DECLARE_WAITQUEUE(wait, current); | 1448 | DECLARE_WAITQUEUE(wait, current); |
| 1449 | struct sk_buff *skb = NULL; | 1449 | struct sk_buff *skb = NULL; |
| 1450 | int error = 0; | ||
| 1450 | 1451 | ||
| 1451 | skb = skb_array_consume(&tfile->tx_array); | 1452 | skb = skb_array_consume(&tfile->tx_array); |
| 1452 | if (skb) | 1453 | if (skb) |
| 1453 | goto out; | 1454 | goto out; |
| 1454 | if (noblock) { | 1455 | if (noblock) { |
| 1455 | *err = -EAGAIN; | 1456 | error = -EAGAIN; |
| 1456 | goto out; | 1457 | goto out; |
| 1457 | } | 1458 | } |
| 1458 | 1459 | ||
| @@ -1464,11 +1465,11 @@ static struct sk_buff *tun_ring_recv(struct tun_file *tfile, int noblock, | |||
| 1464 | if (skb) | 1465 | if (skb) |
| 1465 | break; | 1466 | break; |
| 1466 | if (signal_pending(current)) { | 1467 | if (signal_pending(current)) { |
| 1467 | *err = -ERESTARTSYS; | 1468 | error = -ERESTARTSYS; |
| 1468 | break; | 1469 | break; |
| 1469 | } | 1470 | } |
| 1470 | if (tfile->socket.sk->sk_shutdown & RCV_SHUTDOWN) { | 1471 | if (tfile->socket.sk->sk_shutdown & RCV_SHUTDOWN) { |
| 1471 | *err = -EFAULT; | 1472 | error = -EFAULT; |
| 1472 | break; | 1473 | break; |
| 1473 | } | 1474 | } |
| 1474 | 1475 | ||
| @@ -1479,6 +1480,7 @@ static struct sk_buff *tun_ring_recv(struct tun_file *tfile, int noblock, | |||
| 1479 | remove_wait_queue(&tfile->wq.wait, &wait); | 1480 | remove_wait_queue(&tfile->wq.wait, &wait); |
| 1480 | 1481 | ||
| 1481 | out: | 1482 | out: |
| 1483 | *err = error; | ||
| 1482 | return skb; | 1484 | return skb; |
| 1483 | } | 1485 | } |
| 1484 | 1486 | ||
