]> git.hungrycats.org Git - linux/commitdiff
[TCP]: Receive buffer moderation fixes.
authorDavid S. Miller <davem@nuts.davemloft.net>
Thu, 10 Jun 2004 14:53:15 +0000 (07:53 -0700)
committerDavid S. Miller <davem@nuts.davemloft.net>
Thu, 10 Jun 2004 14:53:15 +0000 (07:53 -0700)
1) Make window clamp follow receive buffer growth so it
   does not limit window advertisements.  Noticed by John
   Heffner and Stephen Hemminger.
2) Fix rcvmem calculation such that tcp_adv_win_scale is
   taken into account.

net/ipv4/tcp_input.c

index 708005f0d0b0c324354ea46ffc68db3edd0ac838..c0a0b65f5066f4dd88c673b4e6be4d89ce5519b5 100644 (file)
@@ -463,6 +463,8 @@ void tcp_rcv_space_adjust(struct sock *sk)
                tp->rcvq_space.space = space;
 
                if (sysctl_tcp_moderate_rcvbuf) {
+                       int new_clamp = space;
+
                        /* Receive space grows, normalize in order to
                         * take into account packet headers and sk_buff
                         * structure overhead.
@@ -472,10 +474,16 @@ void tcp_rcv_space_adjust(struct sock *sk)
                                space = 1;
                        rcvmem = (tp->advmss + MAX_TCP_HEADER +
                                  16 + sizeof(struct sk_buff));
+                       while (tcp_win_from_space(rcvmem) < tp->advmss)
+                               rcvmem += 128;
                        space *= rcvmem;
                        space = min(space, sysctl_tcp_rmem[2]);
-                       if (space > sk->sk_rcvbuf)
+                       if (space > sk->sk_rcvbuf) {
                                sk->sk_rcvbuf = space;
+
+                               /* Make the window clamp follow along.  */
+                               tp->window_clamp = new_clamp;
+                       }
                }
        }