{
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;
}
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;
}
remove_wait_queue(&tfile->wq.wait, &wait);
out:
+ *err = error;
return skb;
}
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
struct tun_struct *tun = netdev_priv(dev);
+ if (dev->rtnl_link_ops != &tun_link_ops)
+ return NOTIFY_DONE;
+
switch (event) {
case NETDEV_CHANGE_TX_QUEUE_LEN:
if (tun_queue_resize(tun))