[PATCH net] tcp: avoid setting cwnd to invalid ssthresh after cwnd reduction states

Subsystems: networking [general], networking [tcp], the rest

STALE3363d

5 messages, 3 authors, 2017-08-03 · open the first message on its own page

[PATCH net] tcp: avoid setting cwnd to invalid ssthresh after cwnd reduction states

From: Yuchung Cheng <hidden>
Date: 2017-08-01 20:22:42

If the sender switches the congestion control during ECN-triggered
cwnd-reduction state (CA_CWR), upon exiting recovery cwnd is set to
the ssthresh value calculated by the previous congestion control. If
the previous congestion control is BBR that always keep ssthresh
to TCP_INIFINITE_SSTHRESH, cwnd ends up being infinite. The safe
step is to avoid assigning invalid ssthresh value when recovery ends.

Signed-off-by: Yuchung Cheng <redacted>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
---
 net/ipv4/tcp_input.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 2920e0cb09f8..dad026fcfd09 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2520,8 +2520,8 @@ static inline void tcp_end_cwnd_reduction(struct sock *sk)
 		return;
 
 	/* Reset cwnd to ssthresh in CWR or Recovery (unless it's undone) */
-	if (inet_csk(sk)->icsk_ca_state == TCP_CA_CWR ||
-	    (tp->undo_marker && tp->snd_ssthresh < TCP_INFINITE_SSTHRESH)) {
+	if (tp->snd_ssthresh < TCP_INFINITE_SSTHRESH &&
+	    (inet_csk(sk)->icsk_ca_state == TCP_CA_CWR || tp->undo_marker)) {
 		tp->snd_cwnd = tp->snd_ssthresh;
 		tp->snd_cwnd_stamp = tcp_jiffies32;
 	}
-- 
2.14.0.rc1.383.gd1ce394fe2-goog

Re: [PATCH net] tcp: avoid setting cwnd to invalid ssthresh after cwnd reduction states

From: Eric Dumazet <hidden>
Date: 2017-08-02 09:07:26

On Tue, 2017-08-01 at 13:22 -0700, Yuchung Cheng wrote:
If the sender switches the congestion control during ECN-triggered
cwnd-reduction state (CA_CWR), upon exiting recovery cwnd is set to
the ssthresh value calculated by the previous congestion control. If
the previous congestion control is BBR that always keep ssthresh
to TCP_INIFINITE_SSTHRESH, cwnd ends up being infinite. The safe
step is to avoid assigning invalid ssthresh value when recovery ends.

Signed-off-by: Yuchung Cheng <redacted>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
---
 net/ipv4/tcp_input.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Acked-by: Eric Dumazet <redacted>

Re: [PATCH net] tcp: avoid setting cwnd to invalid ssthresh after cwnd reduction states

From: David Miller <davem@davemloft.net>
Date: 2017-08-02 17:51:36

From: Yuchung Cheng <redacted>
Date: Tue,  1 Aug 2017 13:22:32 -0700
If the sender switches the congestion control during ECN-triggered
cwnd-reduction state (CA_CWR), upon exiting recovery cwnd is set to
the ssthresh value calculated by the previous congestion control. If
the previous congestion control is BBR that always keep ssthresh
to TCP_INIFINITE_SSTHRESH, cwnd ends up being infinite. The safe
step is to avoid assigning invalid ssthresh value when recovery ends.

Signed-off-by: Yuchung Cheng <redacted>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Applied, thanks.

Is this a -stable candidate?

Re: [PATCH net] tcp: avoid setting cwnd to invalid ssthresh after cwnd reduction states

From: Yuchung Cheng <hidden>
Date: 2017-08-02 17:59:37

On Wed, Aug 2, 2017 at 10:51 AM, David Miller [off-list ref] wrote:
From: Yuchung Cheng <redacted>
Date: Tue,  1 Aug 2017 13:22:32 -0700
quoted
If the sender switches the congestion control during ECN-triggered
cwnd-reduction state (CA_CWR), upon exiting recovery cwnd is set to
the ssthresh value calculated by the previous congestion control. If
the previous congestion control is BBR that always keep ssthresh
to TCP_INIFINITE_SSTHRESH, cwnd ends up being infinite. The safe
step is to avoid assigning invalid ssthresh value when recovery ends.

Signed-off-by: Yuchung Cheng <redacted>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Applied, thanks.

Is this a -stable candidate?
Yes it is. Thanks!

Re: [PATCH net] tcp: avoid setting cwnd to invalid ssthresh after cwnd reduction states

From: David Miller <davem@davemloft.net>
Date: 2017-08-03 16:30:04

From: Yuchung Cheng <redacted>
Date: Wed, 2 Aug 2017 10:58:54 -0700
On Wed, Aug 2, 2017 at 10:51 AM, David Miller [off-list ref] wrote:
quoted
From: Yuchung Cheng <redacted>
Date: Tue,  1 Aug 2017 13:22:32 -0700
quoted
If the sender switches the congestion control during ECN-triggered
cwnd-reduction state (CA_CWR), upon exiting recovery cwnd is set to
the ssthresh value calculated by the previous congestion control. If
the previous congestion control is BBR that always keep ssthresh
to TCP_INIFINITE_SSTHRESH, cwnd ends up being infinite. The safe
step is to avoid assigning invalid ssthresh value when recovery ends.

Signed-off-by: Yuchung Cheng <redacted>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Applied, thanks.

Is this a -stable candidate?
Yes it is. Thanks!
Great, queued up.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help