Skip to content

Commit

Permalink
net: Orphan and de-dst skbs earlier in xmit path.
Browse files Browse the repository at this point in the history
This way GSO packets don't get handled differently.

With help from Eric Dumazet.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
  • Loading branch information
David S. Miller committed Apr 22, 2010
1 parent e326bed commit 9ccb897
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1902,13 +1902,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
if (!list_empty(&ptype_all))
dev_queue_xmit_nit(skb, dev);

if (netif_needs_gso(dev, skb)) {
if (unlikely(dev_gso_segment(skb)))
goto out_kfree_skb;
if (skb->next)
goto gso;
}

/*
* If device doesnt need skb->dst, release it right now while
* its hot in this cpu cache
Expand All @@ -1917,6 +1910,14 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
skb_dst_drop(skb);

skb_orphan_try(skb);

if (netif_needs_gso(dev, skb)) {
if (unlikely(dev_gso_segment(skb)))
goto out_kfree_skb;
if (skb->next)
goto gso;
}

rc = ops->ndo_start_xmit(skb, dev);
if (rc == NETDEV_TX_OK)
txq_trans_update(txq);
Expand Down

0 comments on commit 9ccb897

Please sign in to comment.