From: Eric Dumazet Date: Tue, 7 Dec 2010 00:30:37 +0000 (+0000) Subject: net: call dev_queue_xmit_nit() after skb_dst_drop() X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=15c2d75f49189e1769c5e8f5f099d03d055c4910;p=linux-beck.git 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 Signed-off-by: David S. Miller --- 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) &&