net: call dev_queue_xmit_nit() after skb_dst_drop()
Avoid some atomic ops on dst refcount, calling dev_queue_xmit_nit() after skb_dst_drop() in dev_hard_start_xmit(). When queueing a packet into af_packet socket, we drop dst anyway. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
62ab081213
commit
15c2d75f49
|
@ -2022,9 +2022,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||||
int rc = NETDEV_TX_OK;
|
int rc = NETDEV_TX_OK;
|
||||||
|
|
||||||
if (likely(!skb->next)) {
|
if (likely(!skb->next)) {
|
||||||
if (!list_empty(&ptype_all))
|
|
||||||
dev_queue_xmit_nit(skb, dev);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If device doesnt need skb->dst, release it right now while
|
* If device doesnt need skb->dst, release it right now while
|
||||||
* its hot in this cpu cache
|
* its hot in this cpu cache
|
||||||
|
@ -2032,6 +2029,9 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||||
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
|
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
|
||||||
skb_dst_drop(skb);
|
skb_dst_drop(skb);
|
||||||
|
|
||||||
|
if (!list_empty(&ptype_all))
|
||||||
|
dev_queue_xmit_nit(skb, dev);
|
||||||
|
|
||||||
skb_orphan_try(skb);
|
skb_orphan_try(skb);
|
||||||
|
|
||||||
if (vlan_tx_tag_present(skb) &&
|
if (vlan_tx_tag_present(skb) &&
|
||||||
|
|
Loading…
Reference in New Issue