From: Eric Dumazet <eduma...@google.com>

skbs given to validate_xmit_skb() should not have a next
pointer anymore.

Also if a packet is dropped, increment dev->tx_dropped
__dev_queue_xmit() no longer has to change tx_dropped in this case.

Signed-off-by: Eric Dumazet <eduma...@google.com>
---
 net/core/dev.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index d51343a821ed..85e808f977f5 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2915,9 +2915,6 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff 
*skb, struct net_device
 {
        netdev_features_t features;
 
-       if (skb->next)
-               return skb;
-
        features = netif_skb_features(skb);
        skb = validate_xmit_vlan(skb, features);
        if (unlikely(!skb))
@@ -2960,6 +2957,7 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff 
*skb, struct net_device
 out_kfree_skb:
        kfree_skb(skb);
 out_null:
+       atomic_long_inc(&dev->tx_dropped);
        return NULL;
 }
 
@@ -3349,7 +3347,7 @@ static int __dev_queue_xmit(struct sk_buff *skb, void 
*accel_priv)
 
                        skb = validate_xmit_skb(skb, dev);
                        if (!skb)
-                               goto drop;
+                               goto out;
 
                        HARD_TX_LOCK(dev, txq, cpu);
 
@@ -3376,7 +3374,6 @@ recursion_alert:
        }
 
        rc = -ENETDOWN;
-drop:
        rcu_read_unlock_bh();
 
        atomic_long_inc(&dev->tx_dropped);


Reply via email to