diff options
author | David S. Miller <davem@davemloft.net> | 2014-08-30 00:10:01 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-01 20:39:55 -0400 |
commit | 2ea255137555052655c6a646c4e48ea7481494c7 (patch) | |
tree | 02e58d74385b74eaf91606b504a84237c2711940 /net/core | |
parent | 10b3ad8c21bb4b135768c30dd4c51a1c744da699 (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.c | 35 |
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 | } |
2600 | EXPORT_SYMBOL(netif_skb_features); | 2600 | EXPORT_SYMBOL(netif_skb_features); |
2601 | 2601 | ||
2602 | static 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 | |||
2602 | int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, | 2619 | int 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 | ||
2674 | gso: | 2683 | gso: |
@@ -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; |