From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-Id: <20130326173604.867913350@goodmis.org> Date: Tue, 26 Mar 2013 13:21:30 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Pasi=20K=C3=A4rkk=C3=A4inen?= , Neal Cardwell , Eric Dumazet , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Yuchung Cheng , "David S. Miller" Subject: [PATCH 31/86] tcp: frto should not set snd_cwnd to 0 References: <20130326172059.136127374@goodmis.org> Content-Disposition: inline; filename=0031-tcp-frto-should-not-set-snd_cwnd-to-0.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: 3.6.11.1 stable review patch. If anyone has any objections, please let me know. ------------------ From: Eric Dumazet [ Upstream commit 2e5f421211ff76c17130b4597bc06df4eeead24f ] Commit 9dc274151a548 (tcp: fix ABC in tcp_slow_start()) uncovered a bug in FRTO code : tcp_process_frto() is setting snd_cwnd to 0 if the number of in flight packets is 0. As Neal pointed out, if no packet is in flight we lost our chance to disambiguate whether a loss timeout was spurious. We should assume it was a proper loss. Reported-by: Pasi Kärkkäinen Signed-off-by: Neal Cardwell Signed-off-by: Eric Dumazet Cc: Ilpo Järvinen Cc: Yuchung Cheng Signed-off-by: David S. Miller --- net/ipv4/tcp_input.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 4b3f448..97cbfa9 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3511,7 +3511,8 @@ static bool tcp_process_frto(struct sock *sk, int flag) ((tp->frto_counter >= 2) && (flag & FLAG_RETRANS_DATA_ACKED))) tp->undo_marker = 0; - if (!before(tp->snd_una, tp->frto_highmark)) { + if (!before(tp->snd_una, tp->frto_highmark) || + !tcp_packets_in_flight(tp)) { tcp_enter_frto_loss(sk, (tp->frto_counter == 1 ? 2 : 3), flag); return true; } -- 1.7.10.4