Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4755346pxj; Wed, 12 May 2021 12:30:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxwIwSPvKKcGF94y6pRnXf3gGwEkj/ha532/wcGjg6dWvaBv9Jyv1gMIX4OryvBU6MoD6xu X-Received: by 2002:a17:906:d0c8:: with SMTP id bq8mr38593308ejb.423.1620847801659; Wed, 12 May 2021 12:30:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620847801; cv=none; d=google.com; s=arc-20160816; b=hwJBDZRYZjHUXfmLXB5ONj/QoNuNjqDNoy8g+IGqJ+uMe+Q7yP6ZzhHgM/rEP4pQ/a j2PLk5DRuASMlqMrCfDe7+vwIDiwfP8HdT93zSE3sCd5n2IpRcAqzuJH9ZOSbAQmfVbG 5kmlhzugxdIEoCGroR3MPF0jWXZ1aEQD8PVjRbsJglPDQQnxIs8Rn/9ZA17yMRP9Gpbq McWB0RqAl1aTuJ1wNioVk62zBondP7pjwBY2TlkipMkGzLZM2Z3o8RWyvSlMk98hCF1o 5/uZr2OriRAozUescBYNbzFsCAi/GpdI1XJvJHZYmhkp610l3uw5ZmdeNH71RMLqhkMe azdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hULtR9dmw3jvDsgSPwfJ1I5sUNeDc4PuuYHSKPOdd/U=; b=giY1gBGBTus5Xtw0OmsI6CjR7H0k41bLFEQvR5D8mqZNL1j9BsKPlpp2jmXhtVnTGD Y0YmIWc5M+2l6rEuvIx3rJS9y4o/6yUW+3cG34bhqMPBERu6zgOW8myxUvL1N6WjYEG1 jzwdORQSY8bZMBpqu30OtfnrZkJOElwIXHX2K/gzb8oYETQrH5G/nbyxLGgt4w4DJI7t AbFbQCa2gBzvxttj9E4c+6EwCn/p/bZ8rdW/nrKX/FL/nD3c9zzUgUffXx17qwytmLs7 ON/QkoL/ajQgpaFzAU/q7bzqHtcn157a+z+jf7wTK+ftHDKnrX0UQM7aNio+wxhQzw0Q OokA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=NKsOjoox; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y3si761726ejp.444.2021.05.12.12.29.38; Wed, 12 May 2021 12:30:01 -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=@linuxfoundation.org header.s=korg header.b=NKsOjoox; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1379743AbhELTUM (ORCPT + 99 others); Wed, 12 May 2021 15:20:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:48504 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244748AbhELQvI (ORCPT ); Wed, 12 May 2021 12:51:08 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F3DF161454; Wed, 12 May 2021 16:17:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620836268; bh=ioTsqXbVwYV6iqYpFBqK3emlGivUznW0he31nxkIpTw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NKsOjooxgJX0qi60+OIoKXH9VTRF+dDFStZ9U8oar2wBKoAQ06C6KY9rBM4Ak4MuI LF8BTKZt0gm2G2eePVqWgM/fPYCwlgOmFyjgPBB23RAzEcySqfRn4QTRtUimMtkOFP 271NucGFyWzwAktHDgJdPFS834sdvUisApwxHMJM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Paolo Abeni , Mat Martineau , "David S. Miller" , Sasha Levin Subject: [PATCH 5.12 643/677] mptcp: Retransmit DATA_FIN Date: Wed, 12 May 2021 16:51:29 +0200 Message-Id: <20210512144858.725622887@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mat Martineau [ Upstream commit 6477dd39e62c3a67cfa368ddc127410b4ae424c6 ] With this change, the MPTCP-level retransmission timer is used to resend DATA_FIN. The retranmit timer is not stopped while waiting for a MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all subflows. The retry interval starts at TCP_RTO_MIN and then doubles on each attempt, up to TCP_RTO_MAX. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/146 Fixes: 43b54c6ee382 ("mptcp: Use full MPTCP-level disconnect state machine") Acked-by: Paolo Abeni Signed-off-by: Mat Martineau Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/mptcp/protocol.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 5043c7cb0782..65e5d3eb1078 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -399,6 +399,14 @@ static bool mptcp_pending_data_fin(struct sock *sk, u64 *seq) return false; } +static void mptcp_set_datafin_timeout(const struct sock *sk) +{ + struct inet_connection_sock *icsk = inet_csk(sk); + + mptcp_sk(sk)->timer_ival = min(TCP_RTO_MAX, + TCP_RTO_MIN << icsk->icsk_retransmits); +} + static void mptcp_set_timeout(const struct sock *sk, const struct sock *ssk) { long tout = ssk && inet_csk(ssk)->icsk_pending ? @@ -1052,7 +1060,7 @@ out: } if (snd_una == READ_ONCE(msk->snd_nxt)) { - if (msk->timer_ival) + if (msk->timer_ival && !mptcp_data_fin_enabled(msk)) mptcp_stop_timer(sk); } else { mptcp_reset_timer(sk); @@ -2276,8 +2284,19 @@ static void __mptcp_retrans(struct sock *sk) __mptcp_clean_una_wakeup(sk); dfrag = mptcp_rtx_head(sk); - if (!dfrag) + if (!dfrag) { + if (mptcp_data_fin_enabled(msk)) { + struct inet_connection_sock *icsk = inet_csk(sk); + + icsk->icsk_retransmits++; + mptcp_set_datafin_timeout(sk); + mptcp_send_ack(msk); + + goto reset_timer; + } + return; + } ssk = mptcp_subflow_get_retrans(msk); if (!ssk) @@ -2460,6 +2479,8 @@ void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how) pr_debug("Sending DATA_FIN on subflow %p", ssk); mptcp_set_timeout(sk, ssk); tcp_send_ack(ssk); + if (!mptcp_timer_pending(sk)) + mptcp_reset_timer(sk); } break; } -- 2.30.2