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>
This commit is contained in:
parent
da37845fdc
commit
d21fd63ea3
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user