Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ccb8975 authored by David S. Miller's avatar David S. Miller
Browse files

net: Orphan and de-dst skbs earlier in xmit path.



This way GSO packets don't get handled differently.

With help from Eric Dumazet.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
parent e326bed2
Loading
Loading
Loading
Loading
+8 −7
Original line number Original line Diff line number Diff line
@@ -1902,13 +1902,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
		if (!list_empty(&ptype_all))
		if (!list_empty(&ptype_all))
			dev_queue_xmit_nit(skb, dev);
			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
		 * If device doesnt need skb->dst, release it right now while
		 * its hot in this cpu cache
		 * its hot in this cpu cache
@@ -1917,6 +1910,14 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
			skb_dst_drop(skb);
			skb_dst_drop(skb);


		skb_orphan_try(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);
		rc = ops->ndo_start_xmit(skb, dev);
		if (rc == NETDEV_TX_OK)
		if (rc == NETDEV_TX_OK)
			txq_trans_update(txq);
			txq_trans_update(txq);