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:
Eric Dumazet 2010-12-07 00:30:37 +00:00 committed by David S. Miller
parent 62ab081213
commit 15c2d75f49
1 changed files with 3 additions and 3 deletions

View File

@ -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) &&