Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3025577ybt; Mon, 29 Jun 2020 13:14:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyJdHNmrWX7UihqhYW2WGNR90nQ3ap6bkoJOa2ogt3ZvX4c2qBhAiNMVOdBckFDoh0WlbSG X-Received: by 2002:a17:906:2cd5:: with SMTP id r21mr14964843ejr.20.1593461642185; Mon, 29 Jun 2020 13:14:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593461642; cv=none; d=google.com; s=arc-20160816; b=JYnwQQ4lQkt87iHV546CmS11v/3D/c8T0BdjA+tfT+0irSZSwqvj+TQll485a7/uhI CGQh+rOjs+x/Gib5mR9Gvh0OYr99Tx5yC8L5l33bx1NwGGYBkGua2NxKdKPLie2wzOO4 nQuaHSG3qSly4XSqyew2mFL6mqLidRhFPP+FVKkBEMXi/yID1nZRHu5yWpAbLu47mlRZ gvB1HtyoX2kDLIdmnNiuTCEgMtMsfutLgdjAlgj56c7EukgjZ/rv5r5gJXoS9PdWQpR4 RIphBsnWkRWa9uvrCAfLGtCkAAXph2jNwOJAn9EPCIZEB4iAxzPRztSnYYOkuvxdUQUi wcTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xRBbEN/uKQ1QFs1t0jmzs0/ol9Hvg7ydMn8rG/ijdLc=; b=d9bUWNrTGsCeYRlQcYh0vMHxAZ2LGIewYM18j2kgmBIYV0JU3CA8cd/n1MqtxUHWMj KPUWs24yEY77K5m+HuXVrttzpCnzLXsaWX1IDT5/oOOQAy2H0sbTA2Ep1iWW14WEaQBL 1vh4jnm5Ek3PlH8BfP9q07L/OiPtSyiHNH246eLX9y/qobaMZBWk7pk4g9Y7NI7XhPZX 79IS+NdzOM/gsnGlG2xzTbbEvtIqqsxSk9vcEzbC5CYV/t+DJu4TNQYgCdIohWmFr/gi D09atcRDAVccLz5GpMmKnv2e8+3z9XG3wp9dihBndHRPRU7QD8kfpzCKPtoqj3u+5CoN jf+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="c/k9uCzg"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k13si355762ejb.579.2020.06.29.13.13.39; Mon, 29 Jun 2020 13:14:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="c/k9uCzg"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730530AbgF2UMV (ORCPT + 99 others); Mon, 29 Jun 2020 16:12:21 -0400 Received: from mail.kernel.org ([198.145.29.99]:40580 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732807AbgF2TaV (ORCPT ); Mon, 29 Jun 2020 15:30:21 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D99C125214; Mon, 29 Jun 2020 15:35:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593444932; bh=CDnV8wgM8h/k65NbFa4Ok2WEounI+mN6nVJiujCCaMw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c/k9uCzgFh1qG5FpN4H3/BjMsObKVVNE07l1pyJQ2NGEpAbMeRp2bYIss25OOMZpk 8YRUPsVNhrbWTPFVsaTI9XUvZJDUKsKU4RQuwRHzkL/Zvw8xCYTeHEskwh8eg/8C5G Dkh9eQxH8YfiRBC7QnvC+2aJPrzI5NuYbukmNO3w= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Eric Dumazet , Venkat Venkatsubra , Neal Cardwell , "David S . Miller" , Greg Kroah-Hartman Subject: [PATCH 4.19 029/131] tcp: grow window for OOO packets only for SACK flows Date: Mon, 29 Jun 2020 11:33:20 -0400 Message-Id: <20200629153502.2494656-30-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200629153502.2494656-1-sashal@kernel.org> References: <20200629153502.2494656-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.131-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-4.19.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 4.19.131-rc1 X-KernelTest-Deadline: 2020-07-01T15:34+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Eric Dumazet [ Upstream commit 662051215c758ae8545451628816204ed6cd372d ] Back in 2013, we made a change that broke fast retransmit for non SACK flows. Indeed, for these flows, a sender needs to receive three duplicate ACK before starting fast retransmit. Sending ACK with different receive window do not count. Even if enabling SACK is strongly recommended these days, there still are some cases where it has to be disabled. Not increasing the window seems better than having to rely on RTO. After the fix, following packetdrill test gives : // Initialize connection 0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 +0 bind(3, ..., ...) = 0 +0 listen(3, 1) = 0 +0 < S 0:0(0) win 32792 +0 > S. 0:0(0) ack 1 +0 < . 1:1(0) ack 1 win 514 +0 accept(3, ..., ...) = 4 +0 < . 1:1001(1000) ack 1 win 514 // Quick ack +0 > . 1:1(0) ack 1001 win 264 +0 < . 2001:3001(1000) ack 1 win 514 // DUPACK : Normally we should not change the window +0 > . 1:1(0) ack 1001 win 264 +0 < . 3001:4001(1000) ack 1 win 514 // DUPACK : Normally we should not change the window +0 > . 1:1(0) ack 1001 win 264 +0 < . 4001:5001(1000) ack 1 win 514 // DUPACK : Normally we should not change the window +0 > . 1:1(0) ack 1001 win 264 +0 < . 1001:2001(1000) ack 1 win 514 // Hole is repaired. +0 > . 1:1(0) ack 5001 win 272 Fixes: 4e4f1fc22681 ("tcp: properly increase rcv_ssthresh for ofo packets") Signed-off-by: Eric Dumazet Reported-by: Venkat Venkatsubra Acked-by: Neal Cardwell Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/tcp_input.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index ee1b4804b40de..7441ecfc8320a 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4528,7 +4528,11 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb) if (tcp_ooo_try_coalesce(sk, tp->ooo_last_skb, skb, &fragstolen)) { coalesce_done: - tcp_grow_window(sk, skb); + /* For non sack flows, do not grow window to force DUPACK + * and trigger fast retransmit. + */ + if (tcp_is_sack(tp)) + tcp_grow_window(sk, skb); kfree_skb_partial(skb, fragstolen); skb = NULL; goto add_sack; @@ -4612,7 +4616,11 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb) tcp_sack_new_ofo_skb(sk, seq, end_seq); end: if (skb) { - tcp_grow_window(sk, skb); + /* For non sack flows, do not grow window to force DUPACK + * and trigger fast retransmit. + */ + if (tcp_is_sack(tp)) + tcp_grow_window(sk, skb); skb_condense(skb); skb_set_owner_r(skb, sk); } -- 2.25.1