Do full receiver-side SWS avoidance when rcvbuf < mss. Signed-off-by: John Heffner --- commit f4333661026621e15549fb75b37be785e4a1c443 tree 30d46b64ea19634875fdd4656d33f76db526a313 parent 562aa1d4c6a874373f9a48ac184f662fbbb06a04 author John Heffner Tue, 13 Mar 2007 14:17:03 -0400 committer John Heffner Tue, 13 Mar 2007 14:17:03 -0400 net/ipv4/tcp_output.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index dc15113..e621a63 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1605,8 +1605,15 @@ u32 __tcp_select_window(struct sock *sk) * We also don't do any window rounding when the free space * is too small. */ - if (window <= free_space - mss || window > free_space) + if (window <= free_space - mss || window > free_space) { window = (free_space/mss)*mss; + } else if (mss == full_space) { + /* Do full receive-side SWS avoidance + * when rcvbuf <= mss */ + window = tcp_receive_window(tp); + if (free_space > window + full_space/2) + window = free_space; + } } return window;