]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/sched/sch_generic.c
net: allow to propagate errors through ->ndo_hard_start_xmit()
[mv-sheeva.git] / net / sched / sch_generic.c
index 4ae6aa562f2bbfd6b90e7d40a43eba1ced694ad3..b13821ad2fb64f0f881d22991a2ec5be369f6ed5 100644 (file)
@@ -120,8 +120,15 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
 
        HARD_TX_LOCK(dev, txq, smp_processor_id());
        if (!netif_tx_queue_stopped(txq) &&
-           !netif_tx_queue_frozen(txq))
+           !netif_tx_queue_frozen(txq)) {
                ret = dev_hard_start_xmit(skb, dev, txq);
+
+               /* an error implies that the skb was consumed */
+               if (ret < 0)
+                       ret = NETDEV_TX_OK;
+               /* all NET_XMIT codes map to NETDEV_TX_OK */
+               ret &= ~NET_XMIT_MASK;
+       }
        HARD_TX_UNLOCK(dev, txq);
 
        spin_lock(root_lock);