瀏覽代碼

net: validate_xmit_skb() changes

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 <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Eric Dumazet 9 年之前
父節點
當前提交
d21fd63ea3
共有 1 個文件被更改,包括 2 次插入5 次删除
  1. 2 5
      net/core/dev.c

+ 2 - 5
net/core/dev.c

@@ -2959,9 +2959,6 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device
 {
 {
 	netdev_features_t features;
 	netdev_features_t features;
 
 
-	if (skb->next)
-		return skb;
-
 	features = netif_skb_features(skb);
 	features = netif_skb_features(skb);
 	skb = validate_xmit_vlan(skb, features);
 	skb = validate_xmit_vlan(skb, features);
 	if (unlikely(!skb))
 	if (unlikely(!skb))
@@ -3004,6 +3001,7 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device
 out_kfree_skb:
 out_kfree_skb:
 	kfree_skb(skb);
 	kfree_skb(skb);
 out_null:
 out_null:
+	atomic_long_inc(&dev->tx_dropped);
 	return NULL;
 	return NULL;
 }
 }
 
 
@@ -3393,7 +3391,7 @@ static int __dev_queue_xmit(struct sk_buff *skb, void *accel_priv)
 
 
 			skb = validate_xmit_skb(skb, dev);
 			skb = validate_xmit_skb(skb, dev);
 			if (!skb)
 			if (!skb)
-				goto drop;
+				goto out;
 
 
 			HARD_TX_LOCK(dev, txq, cpu);
 			HARD_TX_LOCK(dev, txq, cpu);
 
 
@@ -3420,7 +3418,6 @@ recursion_alert:
 	}
 	}
 
 
 	rc = -ENETDOWN;
 	rc = -ENETDOWN;
-drop:
 	rcu_read_unlock_bh();
 	rcu_read_unlock_bh();
 
 
 	atomic_long_inc(&dev->tx_dropped);
 	atomic_long_inc(&dev->tx_dropped);