[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [PATCH] netfront/back: do not mark packets of length < MSS as GSO



Should clear gso_type too:

changeset:   774:cb5ad51f5206cb2b756ac1c5731ee47f7e3b8273
tag:         tip
user:        Ian Campbell <ian.campbell@xxxxxxxxxx>
date:        Tue Jan 13 12:50:26 2009 +0000
files:       drivers/xen/netback/netback.c drivers/xen/netfront/netfront.c
description:
netfront/back: do not mark packets of length < MSS as GSO

Linux assumes that skbs marked for GSO are longer than MSS. In
particular tcp_tso_segment assumes that skb_segment will return a
chain of at least 2 skbs.

Both netfront and back should therefor not pass such a packet up the
stack.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>


diff -r 28acedb66302a29c9ef14a3084b4736d3fc192f1 -r 
cb5ad51f5206cb2b756ac1c5731ee47f7e3b8273 drivers/xen/netback/netback.c
--- a/drivers/xen/netback/netback.c     Wed Jan 07 12:21:54 2009 +0900
+++ b/drivers/xen/netback/netback.c     Tue Jan 13 12:50:26 2009 +0000
@@ -1345,6 +1345,11 @@ static void net_tx_action(unsigned long 
                        skb_shinfo(skb)->frags[0].page = (void *)~0UL;
                }
 
+               if (skb->data_len < skb_shinfo(skb)->gso_size) {
+                       skb_shinfo(skb)->gso_size = 0;
+                       skb_shinfo(skb)->gso_type = 0;
+               }
+
                __skb_queue_tail(&tx_queue, skb);
 
                pending_cons++;
diff -r 28acedb66302a29c9ef14a3084b4736d3fc192f1 -r 
cb5ad51f5206cb2b756ac1c5731ee47f7e3b8273 drivers/xen/netfront/netfront.c
--- a/drivers/xen/netfront/netfront.c   Wed Jan 07 12:21:54 2009 +0900
+++ b/drivers/xen/netfront/netfront.c   Tue Jan 13 12:50:26 2009 +0000
@@ -1439,6 +1439,14 @@ err:
                np->stats.rx_packets++;
                np->stats.rx_bytes += skb->len;
 
+#if HAVE_TSO
+               if (skb->data_len < skb_shinfo(skb)->gso_size) {
+                       skb_shinfo(skb)->gso_size = 0;
+#if HAVE_GSO
+                       skb_shinfo(skb)->gso_type = 0;
+#endif
+               }
+#endif
                __skb_queue_tail(&rxq, skb);
 
                np->rx.rsp_cons = ++i;



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.