From patchwork Wed Jan 16 23:05:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yuchung Cheng X-Patchwork-Id: 1026255 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="WElLRFWa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g2rC5rg4z9sBQ for ; Thu, 17 Jan 2019 10:06:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387985AbfAPXGC (ORCPT ); Wed, 16 Jan 2019 18:06:02 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:43151 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387960AbfAPXGA (ORCPT ); Wed, 16 Jan 2019 18:06:00 -0500 Received: by mail-pg1-f193.google.com with SMTP id v28so3483612pgk.10 for ; Wed, 16 Jan 2019 15:06:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KXGjPymY+kd/StRmzLytH48w7Kn/SpEWnih644L4mcg=; b=WElLRFWasHcOFGQXYll/yoENui+SVxWfzEajbxu0du7JNf4Q3yTcSmYUvNC/+wgktp zwzICyQ4+4yVY7Tfl9hCCpxL7rsXBR8EiE7BujeY+ihmXGpf+yZOLAV9+FiV5GOJhUJ3 0EYbbwBhgLNNhme6QE59kMLelVVMBIi8lN+1YjBtaMfFalD8nujnOtHJ9khrBnTswsLy qTv4Pu1Fj6EhJZ0qZoBFMaMzLdYbDshRohfSxZFxfvHBfWeWYft5njKplCQ6Qo5/rd5N 8mPi8H9H6ygN12zONXO7EaGh2pHe4HPAe8kmqGuhEBHiAoYbWobM7shql5eauccbtXsz Padw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KXGjPymY+kd/StRmzLytH48w7Kn/SpEWnih644L4mcg=; b=n7KYeumoHyQ6Y8v+69zYy3VzDgGdJ6z71ZkcMkmsMWaA7RUTEmyZVjUSNaLJQ0YhVx gS46Nn/HBIAmZ8BHJGj+Wkqn7wDV2fGCsVDV57kmGtJmPfkZZOJwMxiryTRgjPVhJ83B lPNu9Jmkydaw+SxaKTTXiqE48engsopDCFZk+Bk9kc5IpU+kaHdK/Skzj2WBpOydsvKw WudQXiGVbL8QqLQM1PJ141WfWXq40+K62lLG6Q8SFiiW95rJ/vnkZi55WuXhqdzNy14U PUnq8F3LdUgEhb5crUYnTCmYdFBG8yd2TRRIFPay7+PN0MRyz7jPlDeNC40WxG5AdGA+ oakw== X-Gm-Message-State: AJcUuke0A/3WMbTCUOdtPqv8rfethjrgiY3yLOsTE4CxgeMN5mqEuBTc 0658Q+P8wAf+mLCDGrwrBh2xAw== X-Google-Smtp-Source: ALg8bN6I/ttmMXBxCLOqRDJa52f/R3iZWD9R3tpBUxK8/mxoVHdS66YDLlL+jAz9LBhr3d3rPGM/2g== X-Received: by 2002:aa7:84d3:: with SMTP id x19mr12244163pfn.220.1547679959473; Wed, 16 Jan 2019 15:05:59 -0800 (PST) Received: from ycheng2.svl.corp.google.com ([2620:15c:2c4:201:d660:6c0b:8a4f:4c77]) by smtp.gmail.com with ESMTPSA id k186sm8481087pge.13.2019.01.16.15.05.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 Jan 2019 15:05:58 -0800 (PST) From: Yuchung Cheng To: davem@davemloft.net, edumazet@google.com Cc: netdev@vger.kernel.org, ncardwell@google.com, soheil@google.com, Yuchung Cheng Subject: [PATCH net-next 6/8] tcp: simplify window probe aborting on USER_TIMEOUT Date: Wed, 16 Jan 2019 15:05:33 -0800 Message-Id: <20190116230535.162758-7-ycheng@google.com> X-Mailer: git-send-email 2.20.1.97.g81188d93c3-goog In-Reply-To: <20190116230535.162758-1-ycheng@google.com> References: <20190116230535.162758-1-ycheng@google.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Previously we use the next unsent skb's timestamp to determine when to abort a socket stalling on window probes. This no longer works as skb timestamp reflects the last instead of the first transmission. Instead we can estimate how long the socket has been stalling with the probe count and the exponential backoff behavior. Signed-off-by: Yuchung Cheng Signed-off-by: Eric Dumazet Reviewed-by: Neal Cardwell Reviewed-by: Soheil Hassas Yeganeh --- net/ipv4/tcp_timer.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index bcc2f5783e57..c36089aa3515 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -333,7 +333,6 @@ static void tcp_probe_timer(struct sock *sk) struct sk_buff *skb = tcp_send_head(sk); struct tcp_sock *tp = tcp_sk(sk); int max_probes; - u32 start_ts; if (tp->packets_out || !skb) { icsk->icsk_probes_out = 0; @@ -348,12 +347,13 @@ static void tcp_probe_timer(struct sock *sk) * corresponding system limit. We also implement similar policy when * we use RTO to probe window in tcp_retransmit_timer(). */ - start_ts = tcp_skb_timestamp(skb); - if (!start_ts) - skb->skb_mstamp_ns = tp->tcp_clock_cache; - else if (icsk->icsk_user_timeout && - (s32)(tcp_time_stamp(tp) - start_ts) > icsk->icsk_user_timeout) - goto abort; + if (icsk->icsk_user_timeout) { + u32 elapsed = tcp_model_timeout(sk, icsk->icsk_probes_out, + tcp_probe0_base(sk)); + + if (elapsed >= icsk->icsk_user_timeout) + goto abort; + } max_probes = sock_net(sk)->ipv4.sysctl_tcp_retries2; if (sock_flag(sk, SOCK_DEAD)) {