Path: news.gmane.org!not-for-mail From: Yuchung Cheng Newsgroups: gmane.linux.network Subject: [PATCH net] tcp: fix incorrect ca_state in tail loss probe Date: Sat, 12 Oct 2013 10:16:27 -0700 Lines: 34 Approved: news@gmane.org Message-ID: <1381598187-9681-1-git-send-email-ycheng@google.com> NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1381598242 29686 80.91.229.3 (12 Oct 2013 17:17:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 12 Oct 2013 17:17:22 +0000 (UTC) Cc: netdev@vger.kernel.org, michael@sterretts.net, jwboyer@fedoraproject.org, sesse@google.com, dormando@rydia.net, Yuchung Cheng To: davem@davemloft.net, ncardwell@google.com, nanditad@google.com Original-X-From: netdev-owner@vger.kernel.org Sat Oct 12 19:17:23 2013 Return-path: Envelope-to: linux-netdev-2@plane.gmane.org Original-Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VV2od-0004tp-02 for linux-netdev-2@plane.gmane.org; Sat, 12 Oct 2013 19:17:23 +0200 Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753183Ab3JLRRU (ORCPT ); Sat, 12 Oct 2013 13:17:20 -0400 Original-Received: from mail-pb0-f74.google.com ([209.85.160.74]:35839 "EHLO mail-pb0-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752493Ab3JLRRS (ORCPT ); Sat, 12 Oct 2013 13:17:18 -0400 Original-Received: by mail-pb0-f74.google.com with SMTP id rq2so543459pbb.1 for ; Sat, 12 Oct 2013 10:17:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=YSBIMZEgVuqyP2cau1199a1sz5d28JA7LPPsF6w9FYQ=; b=cCkXgePT7f0kRy+VBGvs3DZSLhVn0z7O74B7OHYpdZkQBznhNZ2b6ZGbkDqaKJXyLT GEsq/JXCgtwpC7aGSz9dPdAZU6kondKOAmfhh54u6f2+ymcZJ4zHpoA6mWuKJ4zlTF2w 6tRhnT+/N5RkfIfYD/mcDx97X41kRT3NKJ6bsCoiNJIO2+6j8SrOi8C27InOkdIRY/AT I1uu2bvai1CfrC5yQ6UfpKUg2jioFDOi7i5nSEon+JnWeJavHpO01JMHuar7ZeGnAKJg kVLwyiRujU9Fz0CKIMPZihAngQu/0OgqORQIjygeqz+GPgtTxDGQP7IUNR/d+JOPVUse XlSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=YSBIMZEgVuqyP2cau1199a1sz5d28JA7LPPsF6w9FYQ=; b=d95i7RXY0ff5vnWvrGqxWfSvvAE8SC6YAaBn3ZqbARIZm5GgynIAB/WYnrIOqpqGV6 56jVM40bfzLrols1UZzyJWqPIgxee1zPrESh+WrSsDP2tTdYKl/zk13lbt/u7nOn9o3u HrAo2aY4DtV3P0ABEq1lKdazmmPACTc6256QQ2nxtHs5n7s7P1ERkpX7NGNqNf1zDBSv 60xeoswRpMkh0G5ZUgpPYsIbXws9F64n5ytq34O2UDZPv5oPEd8I7P34HpqWkNsLoEBs XXTxs1SLc8TI3vdduhaQ+rmEvcE5vTaqjVCQAT2mMKTJJ9xIFueF5zExfI892PHAcJQ8 jiaw== X-Gm-Message-State: ALoCoQkeL+3MY64KlpZKI1BuYMU+yTQcYF1C+U5u+kPpqROoekUMzIaH45qERBARAi/0vgJ5YM1Cwm+43d66vZMn/WdHPurbMHfFn3PYqeZSAzOEeuSA2jGTSZUkpuH8YwFqiNhABtj93ahsBXrA6POrXb531UvuahU+rnFLTGNLxVHv/08PW3l5PbN8UaTNpUI1qcf6O6MarFcB+fZLYPb339v4EIrLxg== X-Received: by 10.66.5.226 with SMTP id v2mr8825633pav.22.1381598238410; Sat, 12 Oct 2013 10:17:18 -0700 (PDT) Original-Received: from corp2gmr1-2.hot.corp.google.com (corp2gmr1-2.hot.corp.google.com [172.24.189.93]) by gmr-mx.google.com with ESMTPS id a24si3247317yhl.1.1969.12.31.16.00.00 (version=TLSv1.1 cipher=AES128-SHA bits=128/128); Sat, 12 Oct 2013 10:17:18 -0700 (PDT) Original-Received: from blast2.mtv.corp.google.com (blast2.mtv.corp.google.com [172.17.132.164]) by corp2gmr1-2.hot.corp.google.com (Postfix) with ESMTP id 2F2B45A41A0; Sat, 12 Oct 2013 10:17:18 -0700 (PDT) Original-Received: by blast2.mtv.corp.google.com (Postfix, from userid 5463) id C6A85220C26; Sat, 12 Oct 2013 10:17:17 -0700 (PDT) X-Mailer: git-send-email 1.8.4 Original-Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Xref: news.gmane.org gmane.linux.network:286793 Archived-At: On receiving an ACK that covers the loss probe sequence, TLP immediately sets the congestion state to Open, even though some packets are not recovered and retransmisssion are on the way. The later ACks may trigger a WARN_ON check in step D of tcp_fastretrans_alert(), e.g., https://bugzilla.redhat.com/show_bug.cgi?id=989251 The fix is to follow the similar procedure in recovery by calling tcp_try_keep_open(). The sender switches to Open state if no packets are retransmissted. Otherwise it goes to Disorder and let subsequent ACKs move the state to Recovery or Open. Reported-By: Michael Sterrett Tested-By: Dormando Signed-off-by: Yuchung Cheng --- net/ipv4/tcp_input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 113dc5f..53974c7 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3291,7 +3291,7 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag) tcp_init_cwnd_reduction(sk, true); tcp_set_ca_state(sk, TCP_CA_CWR); tcp_end_cwnd_reduction(sk); - tcp_set_ca_state(sk, TCP_CA_Open); + tcp_try_keep_open(sk); NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPLOSSPROBERECOVERY); } -- 1.8.4