diff options
author | Neal Cardwell <ncardwell@google.com> | 2011-11-16 03:58:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-27 18:54:09 -0500 |
commit | 8cd6d6162d998da579d40a1ee061bf8ce1610ff8 (patch) | |
tree | c57f017e0f0f4b0a12760918f999d411a6027c63 /net/ipv4/tcp_input.c | |
parent | f698204bd0bfdc645642e271da117b56b795aee0 (diff) |
tcp: skip cwnd moderation in TCP_CA_Open in tcp_try_to_open
The problem: Senders were overriding cwnd values picked during an undo
by calling tcp_moderate_cwnd() in tcp_try_to_open().
The fix: Don't moderate cwnd in tcp_try_to_open() if we're in
TCP_CA_Open, since doing so is generally unnecessary and specifically
would override a DSACK-based undo of a cwnd reduction made in fast
recovery.
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index a4efdd7cf5a1..78dd38cd5496 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -2881,7 +2881,8 @@ static void tcp_try_to_open(struct sock *sk, int flag) | |||
2881 | 2881 | ||
2882 | if (inet_csk(sk)->icsk_ca_state != TCP_CA_CWR) { | 2882 | if (inet_csk(sk)->icsk_ca_state != TCP_CA_CWR) { |
2883 | tcp_try_keep_open(sk); | 2883 | tcp_try_keep_open(sk); |
2884 | tcp_moderate_cwnd(tp); | 2884 | if (inet_csk(sk)->icsk_ca_state != TCP_CA_Open) |
2885 | tcp_moderate_cwnd(tp); | ||
2885 | } else { | 2886 | } else { |
2886 | tcp_cwnd_down(sk, flag); | 2887 | tcp_cwnd_down(sk, flag); |
2887 | } | 2888 | } |