aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-08-30 00:10:01 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-01 20:39:55 -0400
commit2ea255137555052655c6a646c4e48ea7481494c7 (patch)
tree02e58d74385b74eaf91606b504a84237c2711940 /net/core
parent10b3ad8c21bb4b135768c30dd4c51a1c744da699 (diff)
net: Create xmit_one() helper for dev_hard_start_xmit()
Hopefully making the code a bit easier to read and digest. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 6392adaaa22f..0fde7d2153db 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2599,11 +2599,27 @@ netdev_features_t netif_skb_features(struct sk_buff *skb)
2599} 2599}
2600EXPORT_SYMBOL(netif_skb_features); 2600EXPORT_SYMBOL(netif_skb_features);
2601 2601
2602static int xmit_one(struct sk_buff *skb, struct net_device *dev,
2603 struct netdev_queue *txq)
2604{
2605 unsigned int len;
2606 int rc;
2607
2608 if (!list_empty(&ptype_all))
2609 dev_queue_xmit_nit(skb, dev);
2610
2611 len = skb->len;
2612 trace_net_dev_start_xmit(skb, dev);
2613 rc = netdev_start_xmit(skb, dev, txq);
2614 trace_net_dev_xmit(skb, rc, dev, len);
2615
2616 return rc;
2617}
2618
2602int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, 2619int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
2603 struct netdev_queue *txq) 2620 struct netdev_queue *txq)
2604{ 2621{
2605 int rc = NETDEV_TX_OK; 2622 int rc = NETDEV_TX_OK;
2606 unsigned int skb_len;
2607 2623
2608 if (likely(!skb->next)) { 2624 if (likely(!skb->next)) {
2609 netdev_features_t features; 2625 netdev_features_t features;
@@ -2661,14 +2677,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
2661 } 2677 }
2662 } 2678 }
2663 2679
2664 if (!list_empty(&ptype_all)) 2680 return xmit_one(skb, dev, txq);
2665 dev_queue_xmit_nit(skb, dev);
2666
2667 skb_len = skb->len;
2668 trace_net_dev_start_xmit(skb, dev);
2669 rc = netdev_start_xmit(skb, dev, txq);
2670 trace_net_dev_xmit(skb, rc, dev, skb_len);
2671 return rc;
2672 } 2681 }
2673 2682
2674gso: 2683gso:
@@ -2678,13 +2687,7 @@ gso:
2678 skb->next = nskb->next; 2687 skb->next = nskb->next;
2679 nskb->next = NULL; 2688 nskb->next = NULL;
2680 2689
2681 if (!list_empty(&ptype_all)) 2690 rc = xmit_one(nskb, dev, txq);
2682 dev_queue_xmit_nit(nskb, dev);
2683
2684 skb_len = nskb->len;
2685 trace_net_dev_start_xmit(nskb, dev);
2686 rc = netdev_start_xmit(nskb, dev, txq);
2687 trace_net_dev_xmit(nskb, rc, dev, skb_len);
2688 if (unlikely(rc != NETDEV_TX_OK)) { 2691 if (unlikely(rc != NETDEV_TX_OK)) {
2689 if (rc & ~NETDEV_TX_MASK) 2692 if (rc & ~NETDEV_TX_MASK)
2690 goto out_kfree_gso_skb; 2693 goto out_kfree_gso_skb;