|
@@ -1325,9 +1325,12 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
nskb->next = NULL;
|
|
nskb->next = NULL;
|
|
rc = dev->hard_start_xmit(nskb, dev);
|
|
rc = dev->hard_start_xmit(nskb, dev);
|
|
if (unlikely(rc)) {
|
|
if (unlikely(rc)) {
|
|
|
|
+ nskb->next = skb->next;
|
|
skb->next = nskb;
|
|
skb->next = nskb;
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
|
|
+ if (unlikely(netif_queue_stopped(dev) && skb->next))
|
|
|
|
+ return NETDEV_TX_BUSY;
|
|
} while (skb->next);
|
|
} while (skb->next);
|
|
|
|
|
|
skb->destructor = DEV_GSO_CB(skb)->destructor;
|
|
skb->destructor = DEV_GSO_CB(skb)->destructor;
|