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

[Xen-changelog] [xen-unstable] [NET] gso: Fix rcv mss estimate



# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 6677b97612a2356bba8717c111dc062e8bfe2ad5
# Parent  e256d8ccd6aca34340d71bbe47033e4dc7abd67f
[NET] gso: Fix rcv mss estimate

I noticed that with default TCP window sizes TSO + Xen would slow to a
crawl on certain machines.  It turned out that there is a bug in the
TCP stack when it comes to receiving LRO (counter part of TSO for rx)
packets.

The following fix has been applied upstream.

        [TCP]: Fix rcv mss estimate for LRO

        By passing a Linux-generated TSO packet straight back into
        Linux, Xen
        becomes our first LRO user :) Unfortunately, there is at least
        one spot
        in our stack that needs to be changed to cope with this.

        The receive MSS estimate is computed from the raw packet
        size.  This is
        broken if the packet is GSO/LRO.  Fortunately the real MSS can
        be found
        in gso_size so we simply need to use that if it is non-zero.

        Real LRO NICs should of course set the gso_size field in
        future.

        Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>

Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
---
 patches/linux-2.6.16.29/net-gso-5-rcv-mss.patch |   11 +++++++++++
 1 files changed, 11 insertions(+)

diff -r e256d8ccd6ac -r 6677b97612a2 
patches/linux-2.6.16.29/net-gso-5-rcv-mss.patch
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/linux-2.6.16.29/net-gso-5-rcv-mss.patch   Fri Oct 20 10:46:37 
2006 +0100
@@ -0,0 +1,13 @@
+diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
+index 104af5d..1fa1536 100644
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -127,7 +127,7 @@ static void tcp_measure_rcv_mss(struct s
+       /* skb->len may jitter because of SACKs, even if peer
+        * sends good full-sized frames.
+        */
+-      len = skb->len;
++      len = skb_shinfo(skb)->gso_size ?: skb->len;
+       if (len >= icsk->icsk_ack.rcv_mss) {
+               icsk->icsk_ack.rcv_mss = len;
+       } else {

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


 


Rackspace

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