netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH]NET: Fix GSO problems in dev_hard_start_xmit()
@ 2006-06-25 22:38 Michael Chan
  2006-06-25 23:36 ` Herbert Xu
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Chan @ 2006-06-25 22:38 UTC (permalink / raw)
  To: herbert, davem; +Cc: netdev

Fix 2 problems in dev_hard_start_xmit():

1. nskb->next needs to link back to skb->next if hard_start_xmit()
returns non-zero.

2. Since the total number of GSO fragments may exceed MAX_SKB_FRAGS + 1,
it needs to stop transmitting if the netif_queue is stopped.

Signed-off-by: Michael Chan <mchan@broadcom.com>


diff --git a/net/core/dev.c b/net/core/dev.c
index d293e0f..84e06ae 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1325,9 +1325,12 @@ int dev_hard_start_xmit(struct sk_buff *
 		nskb->next = NULL;
 		rc = dev->hard_start_xmit(nskb, dev);
 		if (unlikely(rc)) {
+			nskb->next = skb->next;
 			skb->next = nskb;
 			return rc;
 		}
+		if (unlikely(netif_queue_stopped(dev) && skb->next))
+			return NETDEV_TX_BUSY;
 	} while (skb->next);
 	
 	skb->destructor = DEV_GSO_CB(skb)->destructor;



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-06-26  6:57 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-25 22:38 [PATCH]NET: Fix GSO problems in dev_hard_start_xmit() Michael Chan
2006-06-25 23:36 ` Herbert Xu
2006-06-26  6:57   ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).