aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/tun.c8
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
1481out: 1482out:
1483 *err = error;
1482 return skb; 1484 return skb;
1483} 1485}
1484 1486