diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-12-07 00:30:37 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-08 10:39:54 -0800 |
commit | 15c2d75f49189e1769c5e8f5f099d03d055c4910 (patch) | |
tree | ba8ba52d99f81bf988cb83cfb57ab234b8215276 /net | |
parent | 62ab0812137ec4f9884dd7de346238841ac03283 (diff) |
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 822b15b8d11c..d28b3a023bb2 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2022,9 +2022,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, int rc = NETDEV_TX_OK; 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 * 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) skb_dst_drop(skb); + if (!list_empty(&ptype_all)) + dev_queue_xmit_nit(skb, dev); + skb_orphan_try(skb); if (vlan_tx_tag_present(skb) && |