From patchwork Sun Feb 3 19:13:05 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 217797 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 606502C0094 for ; Mon, 4 Feb 2013 06:13:14 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753491Ab3BCTNK (ORCPT ); Sun, 3 Feb 2013 14:13:10 -0500 Received: from mail-pa0-f51.google.com ([209.85.220.51]:63617 "EHLO mail-pa0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753417Ab3BCTNI (ORCPT ); Sun, 3 Feb 2013 14:13:08 -0500 Received: by mail-pa0-f51.google.com with SMTP id hz1so2022420pad.24 for ; Sun, 03 Feb 2013 11:13:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:subject:from:to:cc:date:in-reply-to :references:content-type:x-mailer:content-transfer-encoding :mime-version; bh=BWMywtGVuKRA7fZDox/MluG/PrbOcuQq7Xknf/YRfjk=; b=EFzdc9BlboMcaMlqQWByk4wjfxZKqPyVHMyIbIxzfJnjeZIql0dd/Eb3s91ttMGmHp e7YKmSIL6yOrMKDd+iZyhkheYntHdL16jLwqNP5czc6IvciWPk2Y8pxCYsKutj1yk+vx v8EWlPyfvRbJfgZrP6MxUAdvE3JKbkXlU13TkgKzqbCCdtKnTJNl6eEgtsgQWOcTTcZD ePcJPNE5tPJ9wgQbSB3dYjogq43pegQxuifuFeVgDgIIfk7i/l5sdN8+blh4ONmeQehD 2vvmF1rUC23bDinDhayb8/Nj5+9ZKKdYKzWSFv/gGgABlMARQ+42DDVn83JgBj/08Viv MP5Q== X-Received: by 10.68.204.103 with SMTP id kx7mr49390632pbc.33.1359918788205; Sun, 03 Feb 2013 11:13:08 -0800 (PST) Received: from [172.19.253.6] ([172.19.253.6]) by mx.google.com with ESMTPS id oj1sm15410498pbb.19.2013.02.03.11.13.06 (version=SSLv3 cipher=RC4-SHA bits=128/128); Sun, 03 Feb 2013 11:13:07 -0800 (PST) Message-ID: <1359918785.30177.111.camel@edumazet-glaptop> Subject: [PATCH] tcp: frto should not set snd_cwnd to 0 From: Eric Dumazet To: Neal Cardwell , Ilpo =?ISO-8859-1?Q?J=E4rvinen?= Cc: Pasi =?ISO-8859-1?Q?K=E4rkk=E4inen?= , David Miller , Hannes Frederic Sowa , Stephen Hemminger , Netdev , Yuchung Cheng Date: Sun, 03 Feb 2013 11:13:05 -0800 In-Reply-To: <1359826377.30177.86.camel@edumazet-glaptop> References: <20130123161238.GE8912@reaktio.net> <20130123214445.GA16641@order.stressinduktion.org> <20130123215151.GF8912@reaktio.net> <20130123152642.4a8389ba@nehalam.linuxnetplumber.net> <20130123234116.GC16641@order.stressinduktion.org> <1358984831.12374.1227.camel@edumazet-glaptop> <20130124135120.GD16641@order.stressinduktion.org> <1359777110.30177.58.camel@edumazet-glaptop> <20130202142832.GP8912@reaktio.net> <1359818075.30177.78.camel@edumazet-glaptop> <1359826377.30177.86.camel@edumazet-glaptop> X-Mailer: Evolution 3.2.3-0ubuntu6 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Eric Dumazet 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 --- net/ipv4/tcp_input.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 8aca4ee..680c422 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3484,7 +3484,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; }