From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 401C0224B09; Sat, 27 Sep 2025 09:41:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966061; cv=none; b=JPHqv/LNWg13SJ+mmJA0FKncJWbTfzl7pIaBk8bukUMLeJO5jGyNG+WvpewuPHvHhamNMiC7cyk4Op61t8FVDOcXcwk+MA5+oLIvs8TqAjBXJvLli7FhOZSwcEgpG9V5xOGVFAGwcwRUagMypUU4Be1HBmI8Ak2qZEcgJOsD/HU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966061; c=relaxed/simple; bh=Qvnazvu8KZikS34bBexFFn3chd1rnQLQENq0ho6H0Lg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TDXD2lcigdsTuLBo97e+gLcmZaQbu2Af9v3Lf3lrER37ILPOOnvpKKa/z6g8kPp/y1yTPER38Nopn3Il8zft5QybOPKehLkUbOYujieHrH9/akbJHeYlU+7c0Sg3DoCqJrGXdz+STPbi7Y8iBwR160q0XyAT5pqr7wsTSURV6HM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PMGWv525; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PMGWv525" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F2D67C4CEE7; Sat, 27 Sep 2025 09:40:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966060; bh=Qvnazvu8KZikS34bBexFFn3chd1rnQLQENq0ho6H0Lg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PMGWv525G1cBT/PWPGBD1SSVr23udDZGi8tJpKnmbOkP6QJt7rje+khJJb2/k656u yhdfvK2gtUdeJQnGkxG3tD9ViKOmal89QcTHCMAMtVSSdtYq+hRoBqC4Y60orlEu/o mEVTAV2LcWzQA47ruq7zCe+CX9xyngYD8LnMggXVingtTBQTMV0Oznk5xuhlWEQ8Ji OMeTWxAa6PP8bQJ//uRgN9g/PgwiESF7wTxrpbVukJX3e/UM+/XgkWBSgeprhYo7sO DTgTlngBzjXxrHoM231JCZr/W3TxQzQfHQTz3/7PcGXMJ0TQOmy39Sbgeg3bucJBfz hgnoMTBqdqFIg== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:37 +0200 Subject: [PATCH net-next 1/8] mptcp: leverage skb deferral free Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-1-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1333; i=matttbe@kernel.org; h=from:subject:message-id; bh=2Aa8iooFY/lXVq8j36OdaPl/LXwvC0m91FKw8nQsJZ4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub5S5o1RqLfDH+nON7+4n23Y+OvF5xT9/R4fne1Z55 f+U1jxu3lHKwiDGxSArpsgi3RaZP/N5FW+Jl58FzBxWJpAhDFycAjCRDX6MDG2FRycdednQGqzx Pc5OfmrhTL0gq18nRaXkaooDTT/0dTAyrMx4NM3v3sazjVrpTd8e+0ptdE6Wb74cUeiga38gJWg vDwA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni Usage of the skb deferral API is straight-forward; with multiple subflows actives this allow moving part of the received application load into multiple CPUs. Also fix a typo in the related comment. Reviewed-by: Geliang Tang Tested-by: Geliang Tang Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/protocol.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 735a209d40725f077de1056de5e1c64ffec77f55..62cdd2bcff9da12783b97fd4081= 3ede85b5c83d9 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1943,12 +1943,13 @@ static int __mptcp_recvmsg_mskq(struct sock *sk, } =20 if (!(flags & MSG_PEEK)) { - /* avoid the indirect call, we know the destructor is sock_wfree */ + /* avoid the indirect call, we know the destructor is sock_rfree */ skb->destructor =3D NULL; + skb->sk =3D NULL; atomic_sub(skb->truesize, &sk->sk_rmem_alloc); sk_mem_uncharge(sk, skb->truesize); __skb_unlink(skb, &sk->sk_receive_queue); - __kfree_skb(skb); + skb_attempt_defer_free(skb); msk->bytes_consumed +=3D count; } =20 --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5FCF0224B09; Sat, 27 Sep 2025 09:41:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966064; cv=none; b=BnJBydRm9cmTPDS+1w/kkaoU+DK9K4KEEpp3Puz1xyhc3dl5kiai5AwQaZsqyDzwwFCIuUZtGPcjDJDjKSzDzP4i4z/TPtmHWLbhyrde6e3p9SVM6v0mJVn/bfeMbgdDosNy0V5Jul1ThqRCm5SrEGU2v+dBUDeEQfBOubYElA0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966064; c=relaxed/simple; bh=HsR6vI/YnFPkdFnl2rxL8na+IY3keIOGzaIFqyFVzo8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bNXgmB614sQ3eMlHASzk0De3mm/878N8PayQR9qLWbiatG8wnk26NStf6NwFjkFWCJ71baespbBOaR9t/3HxAFXmJWh8VYJXpoBv8KHyjEXFOiZqSdnR7rrAxYIzMPEbnBraDMrpLy42PkDH7l6kJ6E2oEaueGLlH2bCpyN+FAA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gNQDvfLP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gNQDvfLP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2FA76C113CF; Sat, 27 Sep 2025 09:41:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966064; bh=HsR6vI/YnFPkdFnl2rxL8na+IY3keIOGzaIFqyFVzo8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gNQDvfLP2ZUMp4wUTC2cRV7ScihQd7ixjTTEVzKjq5FGakYWJYyKbfZ7SitNppfP4 3sQwTOFCxwcVAFdzbZ+ZGqKgcmBN+fXV/7Iy3kCKjcn6IWtOMoH+nBWFTJsjd7uiQ9 QHDGHly5e5JnCs0nUEYCtn80u/WZVos5kL5p0pmo+P+oJS0xyFhPp4FWQhl7gdzJVp xBNVcODn2E1LNGnFzcshcFq66ifUhURBNG9/03BkQSVgFFgg2dlzWigLTHWzNyBEyi YGbBLE64tjroCtF8F4cfSJWcbKTYYyPDjMoDaSihpbwLHTpN9JWT4/DZXR9A/SfuyK dViHA4DtVQiwg== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:38 +0200 Subject: [PATCH net-next 2/8] tcp: make tcp_rcvbuf_grow() accessible to mptcp code Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-2-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1665; i=matttbe@kernel.org; h=from:subject:message-id; bh=ZCorjkYZU93IuWz0Ujs0IvajzlZtodMVGTU9qYMX9cc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub5SrlhU/URrA6mRo9evgv2D+8IutIlv652iITvSX3 N4eH3Omo5SFQYyLQVZMkUW6LTJ/5vMq3hIvPwuYOaxMIEMYuDgFYCKHDzMyzPgpE3WDecXaiTWT k26yT16YPsva+LzkhfebGmazetw8conhf2r2qmmmHyPMTTi4AgJ0t/iLKKTeDKuTfd5/NFVhgxI nHwA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni To leverage the auto-tuning improvements brought by commit 2da35e4b4df9 ("Merge branch 'tcp-receive-side-improvements'"), the MPTCP stack need to access the mentioned helper. Acked-by: Geliang Tang Acked-by: Matthieu Baerts (NGI0) Signed-off-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- include/net/tcp.h | 1 + net/ipv4/tcp_input.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 7c51a0a5ace820bd45d4cc551a15154f8488a880..5ca230ed526ae02711e8d2a409b= 91664b73390f2 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -370,6 +370,7 @@ void tcp_delack_timer_handler(struct sock *sk); int tcp_ioctl(struct sock *sk, int cmd, int *karg); enum skb_drop_reason tcp_rcv_state_process(struct sock *sk, struct sk_buff= *skb); void tcp_rcv_established(struct sock *sk, struct sk_buff *skb); +void tcp_rcvbuf_grow(struct sock *sk); void tcp_rcv_space_adjust(struct sock *sk); int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp); void tcp_twsk_destructor(struct sock *sk); diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 79d5252ed6cc1a24ec898f4168d47c39c6e92fe1..e2b5a739fb16dcbfce62d63f28b= bd1c971aad747 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -891,7 +891,7 @@ static inline void tcp_rcv_rtt_measure_ts(struct sock *= sk, } } =20 -static void tcp_rcvbuf_grow(struct sock *sk) +void tcp_rcvbuf_grow(struct sock *sk) { const struct net *net =3D sock_net(sk); struct tcp_sock *tp =3D tcp_sk(sk); --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD7BD2D9493; Sat, 27 Sep 2025 09:41:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966067; cv=none; b=jOpBdyome0d8fpGDIJhRg9MibUs0oYVRt51ZkEVxWyW5WgQvpz1vYIECv3D4NOfmc+Cb9fIS+3GIx05krPJiGbULWci5fu3luMFZAwRsTTV4MR377uUXYa6hT+lDFpyXUQqMM0Hh/YbWmO/ia+oS7sNkxkbDMnVgPCmrJAJcaqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966067; c=relaxed/simple; bh=96liQdHyINpJivQjUfjO8HeHUporkIbfcFfp0+dhHG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u9HTRYo+BhnwHFYR+GYSY4IvRn1C8JU82+jBmJkHINGBxVbu54m+4SEu4tk3YE3bBwDlVOx77+UU56LuOlb0rHOC6pOOBajytMjzHGKk69c3e7zfyiaGbtvUvuyauutS0fQPgroFq0IQGsuvRBINPakIwBlSvCNF3sceJNbeWPg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XMobheC8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XMobheC8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6144AC4CEE7; Sat, 27 Sep 2025 09:41:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966067; bh=96liQdHyINpJivQjUfjO8HeHUporkIbfcFfp0+dhHG8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XMobheC8xpqQI9PdzTTIOPIzADDk2dZV1bPpObMbqugCRQSP/npfBUl4P2MhUlUdo 6NdDsXEzIkUcgsAgx7Xh0rVhDn74dKom5bY9n1LLHGOBoN04FTxHd+bn7I5uFHKsGj qXlqY9fV+lW49a3GDp+u6uF2Dt+EzfOkh/zFeDBWMrblmPayGmrWy/bJr2y0bvxLmT /TZgAiNnYdL/2KpDkDIKEetHQm77o38cyIK7ywFghhmLG9BpmTI8YhnLEVB6tXBlwK 42fNZf1TnfXS6lGTpz2Co99HNs4Gm2IaE8iEvVKnSNxpvIDkmE6XOY/ViPUk0pbo3e XDAbePLvx+K8A== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:39 +0200 Subject: [PATCH net-next 3/8] mptcp: rcvbuf auto-tuning improvement Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-3-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6824; i=matttbe@kernel.org; h=from:subject:message-id; bh=yGaelyAPu5uQ/arGQNIYVdDpszzRp1Ye2ABH8DkBfPM=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub5R3v7fr5LWr3rtKKwRtr5oy5XXuLjZf1Du/ZRZ7P ZvwScGjHaUsDGJcDLJiiizSbZH5M59X8ZZ4+VnAzGFlAhnCwMUpABNR/c/w3/+8MW/+A//QPx8W /i28Fd6YI/JyzbKI+6wPAnXCn/58psjwi/ny6XMzvHMYrudvcmLsvJ12IOlf5yPG1SsWTHt9sPm fOS8A X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni Apply to the MPTCP auto-tuning the same improvements introduced for the TCP protocol by the merge commit 2da35e4b4df9 ("Merge branch 'tcp-receive-side-improvements'"). The main difference is that TCP subflow and the main MPTCP socket need to account separately for OoO: MPTCP does not care for TCP-level OoO and vice versa, as a consequence do not reflect MPTCP-level rcvbuf increase due to OoO packets at the subflow level. This refeactor additionally allow dropping the msk receive buffer update at receive time, as the latter only intended to cope with subflow receive buffer increase due to OoO packets. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/487 Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/559 Reviewed-by: Geliang Tang Tested-by: Geliang Tang Signed-off-by: Paolo Abeni Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/protocol.c | 97 +++++++++++++++++++++++++-----------------------= ---- net/mptcp/protocol.h | 4 +-- 2 files changed, 49 insertions(+), 52 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 62cdd2bcff9da12783b97fd40813ede85b5c83d9..f994e7f45f7b96c280708d7a29c= 1423a91e4cfee 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -179,6 +179,35 @@ static bool mptcp_ooo_try_coalesce(struct mptcp_sock *= msk, struct sk_buff *to, return mptcp_try_coalesce((struct sock *)msk, to, from); } =20 +/* "inspired" by tcp_rcvbuf_grow(), main difference: + * - mptcp does not maintain a msk-level window clamp + * - returns true when the receive buffer is actually updated + */ +static bool mptcp_rcvbuf_grow(struct sock *sk) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + const struct net *net =3D sock_net(sk); + int rcvwin, rcvbuf, cap; + + if (!READ_ONCE(net->ipv4.sysctl_tcp_moderate_rcvbuf) || + (sk->sk_userlocks & SOCK_RCVBUF_LOCK)) + return false; + + rcvwin =3D msk->rcvq_space.space << 1; + + if (!RB_EMPTY_ROOT(&msk->out_of_order_queue)) + rcvwin +=3D MPTCP_SKB_CB(msk->ooo_last_skb)->end_seq - msk->ack_seq; + + cap =3D READ_ONCE(net->ipv4.sysctl_tcp_rmem[2]); + + rcvbuf =3D min_t(u32, mptcp_space_from_win(sk, rcvwin), cap); + if (rcvbuf > sk->sk_rcvbuf) { + WRITE_ONCE(sk->sk_rcvbuf, rcvbuf); + return true; + } + return false; +} + /* "inspired" by tcp_data_queue_ofo(), main differences: * - use mptcp seqs * - don't cope with sacks @@ -292,6 +321,9 @@ static void mptcp_data_queue_ofo(struct mptcp_sock *msk= , struct sk_buff *skb) end: skb_condense(skb); skb_set_owner_r(skb, sk); + /* do not grow rcvbuf for not-yet-accepted or orphaned sockets. */ + if (sk->sk_socket) + mptcp_rcvbuf_grow(sk); } =20 static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, @@ -784,18 +816,10 @@ static bool move_skbs_to_msk(struct mptcp_sock *msk, = struct sock *ssk) return moved; } =20 -static void __mptcp_rcvbuf_update(struct sock *sk, struct sock *ssk) -{ - if (unlikely(ssk->sk_rcvbuf > sk->sk_rcvbuf)) - WRITE_ONCE(sk->sk_rcvbuf, ssk->sk_rcvbuf); -} - static void __mptcp_data_ready(struct sock *sk, struct sock *ssk) { struct mptcp_sock *msk =3D mptcp_sk(sk); =20 - __mptcp_rcvbuf_update(sk, ssk); - /* Wake-up the reader only for in-sequence data */ if (move_skbs_to_msk(msk, ssk) && mptcp_epollin_ready(sk)) sk->sk_data_ready(sk); @@ -2014,48 +2038,26 @@ static void mptcp_rcv_space_adjust(struct mptcp_soc= k *msk, int copied) if (msk->rcvq_space.copied <=3D msk->rcvq_space.space) goto new_measure; =20 - if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_moderate_rcvbuf) && - !(sk->sk_userlocks & SOCK_RCVBUF_LOCK)) { - u64 rcvwin, grow; - int rcvbuf; + msk->rcvq_space.space =3D msk->rcvq_space.copied; + if (mptcp_rcvbuf_grow(sk)) { =20 - rcvwin =3D ((u64)msk->rcvq_space.copied << 1) + 16 * advmss; + /* Make subflows follow along. If we do not do this, we + * get drops at subflow level if skbs can't be moved to + * the mptcp rx queue fast enough (announced rcv_win can + * exceed ssk->sk_rcvbuf). + */ + mptcp_for_each_subflow(msk, subflow) { + struct sock *ssk; + bool slow; =20 - grow =3D rcvwin * (msk->rcvq_space.copied - msk->rcvq_space.space); - - do_div(grow, msk->rcvq_space.space); - rcvwin +=3D (grow << 1); - - rcvbuf =3D min_t(u64, mptcp_space_from_win(sk, rcvwin), - READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_rmem[2])); - - if (rcvbuf > sk->sk_rcvbuf) { - u32 window_clamp; - - window_clamp =3D mptcp_win_from_space(sk, rcvbuf); - WRITE_ONCE(sk->sk_rcvbuf, rcvbuf); - - /* Make subflows follow along. If we do not do this, we - * get drops at subflow level if skbs can't be moved to - * the mptcp rx queue fast enough (announced rcv_win can - * exceed ssk->sk_rcvbuf). - */ - mptcp_for_each_subflow(msk, subflow) { - struct sock *ssk; - bool slow; - - ssk =3D mptcp_subflow_tcp_sock(subflow); - slow =3D lock_sock_fast(ssk); - WRITE_ONCE(ssk->sk_rcvbuf, rcvbuf); - WRITE_ONCE(tcp_sk(ssk)->window_clamp, window_clamp); - if (tcp_can_send_ack(ssk)) - tcp_cleanup_rbuf(ssk, 1); - unlock_sock_fast(ssk, slow); - } + ssk =3D mptcp_subflow_tcp_sock(subflow); + slow =3D lock_sock_fast(ssk); + tcp_sk(ssk)->rcvq_space.space =3D msk->rcvq_space.copied; + tcp_rcvbuf_grow(ssk); + unlock_sock_fast(ssk, slow); } } =20 - msk->rcvq_space.space =3D msk->rcvq_space.copied; new_measure: msk->rcvq_space.copied =3D 0; msk->rcvq_space.time =3D mstamp; @@ -2084,11 +2086,6 @@ static bool __mptcp_move_skbs(struct sock *sk) if (list_empty(&msk->conn_list)) return false; =20 - /* verify we can move any data from the subflow, eventually updating */ - if (!(sk->sk_userlocks & SOCK_RCVBUF_LOCK)) - mptcp_for_each_subflow(msk, subflow) - __mptcp_rcvbuf_update(sk, subflow->tcp_sock); - subflow =3D list_first_entry(&msk->conn_list, struct mptcp_subflow_context, node); for (;;) { diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 371084a3fc225391fe98ad42a2e2f63465119989..52f9cfa4ce95c789a7b9c53c470= 95abe7964d18f 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -341,8 +341,8 @@ struct mptcp_sock { struct mptcp_pm_data pm; struct mptcp_sched_ops *sched; struct { - u32 space; /* bytes copied in last measurement window */ - u32 copied; /* bytes copied in this measurement window */ + int space; /* bytes copied in last measurement window */ + int copied; /* bytes copied in this measurement window */ u64 time; /* start time of measurement window */ u64 rtt_us; /* last maximum rtt of subflows */ } rcvq_space; --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 81AA52D94A8; Sat, 27 Sep 2025 09:41:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966070; cv=none; b=K2MI3tk++5Grou/1gudu7HntThxhe4sVh42/TvIoX7YV5mumJjfqU/jNNm0RbDi+Cb2Mn99hx3hxxWfTKxJJuJbyl3ggZiYF7qwFEHiL8Bv9OlLzDcz/3KbKGbqtg22GJzklPLvnvZmjC/YRFyBXPrFGoBOV8QLTlEKzQlBC9VI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966070; c=relaxed/simple; bh=DuR/n0MAhNOdVdW7cbtGYlCwhUUWqMCY1IxaSFB1xto=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kEPhy1Z3JqKPdvNnSTbwNczoPRXycZvPLHQoBPwKAegIpBkcsI0fQAVvIpxAwWYElidD3aNs35eh1WHV3wf8VD8wUm+LlZuD7EAjAVqXts4qDT9lL9h3WtAWcbuXzAoujeOMESdrAXxrfmdUVdJhU/BLqqo7xeZYVx26ec7wu4s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YID/ekxJ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YID/ekxJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9289EC113CF; Sat, 27 Sep 2025 09:41:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966070; bh=DuR/n0MAhNOdVdW7cbtGYlCwhUUWqMCY1IxaSFB1xto=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YID/ekxJBq4AuQY5qqMfEo7RMton9JujOB8PjWdEKoZpp2cQ01xM3v6wfesMP+oyE Of1RF/F3pLmZUy8lBuCzjux4/KB6aidg9dIdo2In/leaFmRQImKXumHoF39HsaYw3D UVrqPVZsTwBuu75zWEZFKXrauWQs1B1j1CkUNA7/08PEDLwaJgX0lIHYKnpD/WJm9T 31UnWmLyNfnuC6CoWLcAOOWIjHkYAHztMnuTY40NDP7qtZahlSUBgLXCRAJlYGrQ+n m2Jy5TdZxaPYPKJR4cY66MiQdxOnRCLgGf0oKNSZf5BosV9IA7lMZZux1iSaFz+xf/ drA5gZGJqlC1Q== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:40 +0200 Subject: [PATCH net-next 4/8] mptcp: introduce the mptcp_init_skb helper Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-4-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3172; i=matttbe@kernel.org; h=from:subject:message-id; bh=a6n+Svpd0CKjvMgJKQmYqY6PoYH398y5gIFNbgE5hm4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub1SY1zE1bs5MHv6bif+tDPgPz9demSHs8fXN8wbdP 2dfdmVc7ihlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZgIzxZGhjezok2M90T9mKdr uTw8TVNhv33NSbnTO/cUF8i5CMjPv8fwv9SUza91y/6XLOv8dksHPTV6qCT0Oq8012n+pI55CYL CrAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni Factor out all the skb initialization step in a new helper and use it. Note that this change moves the MPTCP CB initialization earlier: we can do such step as soon as the skb leaves the subflow socket receive queues. Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Paolo Abeni Reviewed-by: Geliang Tang Tested-by: Geliang Tang Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/protocol.c | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index f994e7f45f7b96c280708d7a29c1423a91e4cfee..832782e23740d22acda608966c2= 9516666c9b111 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -326,27 +326,11 @@ static void mptcp_data_queue_ofo(struct mptcp_sock *m= sk, struct sk_buff *skb) mptcp_rcvbuf_grow(sk); } =20 -static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, - struct sk_buff *skb, unsigned int offset, - size_t copy_len) +static void mptcp_init_skb(struct sock *ssk, struct sk_buff *skb, int offs= et, + int copy_len) { - struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk); - struct sock *sk =3D (struct sock *)msk; - struct sk_buff *tail; - bool has_rxtstamp; - - __skb_unlink(skb, &ssk->sk_receive_queue); - - skb_ext_reset(skb); - skb_orphan(skb); - - /* try to fetch required memory from subflow */ - if (!sk_rmem_schedule(sk, skb, skb->truesize)) { - MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RCVPRUNED); - goto drop; - } - - has_rxtstamp =3D TCP_SKB_CB(skb)->has_rxtstamp; + const struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk); + bool has_rxtstamp =3D TCP_SKB_CB(skb)->has_rxtstamp; =20 /* the skb map_seq accounts for the skb offset: * mptcp_subflow_get_mapped_dsn() is based on the current tp->copied_seq @@ -358,6 +342,24 @@ static bool __mptcp_move_skb(struct mptcp_sock *msk, s= truct sock *ssk, MPTCP_SKB_CB(skb)->has_rxtstamp =3D has_rxtstamp; MPTCP_SKB_CB(skb)->cant_coalesce =3D 0; =20 + __skb_unlink(skb, &ssk->sk_receive_queue); + + skb_ext_reset(skb); + skb_dst_drop(skb); +} + +static bool __mptcp_move_skb(struct sock *sk, struct sk_buff *skb) +{ + u64 copy_len =3D MPTCP_SKB_CB(skb)->end_seq - MPTCP_SKB_CB(skb)->map_seq; + struct mptcp_sock *msk =3D mptcp_sk(sk); + struct sk_buff *tail; + + /* try to fetch required memory from subflow */ + if (!sk_rmem_schedule(sk, skb, skb->truesize)) { + MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RCVPRUNED); + goto drop; + } + if (MPTCP_SKB_CB(skb)->map_seq =3D=3D msk->ack_seq) { /* in sequence */ msk->bytes_received +=3D copy_len; @@ -678,7 +680,9 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp= _sock *msk, if (offset < skb->len) { size_t len =3D skb->len - offset; =20 - ret =3D __mptcp_move_skb(msk, ssk, skb, offset, len) || ret; + mptcp_init_skb(ssk, skb, offset, len); + skb_orphan(skb); + ret =3D __mptcp_move_skb(sk, skb) || ret; seq +=3D len; =20 if (unlikely(map_remaining < len)) { --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C6B02D7809; Sat, 27 Sep 2025 09:41:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966074; cv=none; b=ivR4Aqij7dHNKApouSwtqi3539vhCTk5JZhfB80Gc/xqI5gcNXYmu8KjMIOUI5x7FOMseRYaR6+PeHLFSnSpkPXs43ZY+VDQgjNsXUuAgqX2sLtzco4IYaxGnCPUT3+ozjTz/2fBtnNVLgXA1BpiowqwvXhG/NWQwIRYOSWtEVo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966074; c=relaxed/simple; bh=HzIZhFYsoiSBj+TBnB6khPNFpiWrBNQ8WWdb4UesiYA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oettnUnxODapOuAUPBi5VuZrcnJPI5S6p2uq1cOYhazsuj91S6vVzwuBQz2Fw1rBm0GTEUdIfAqpbHSg4vLGNxzJp8CrIbtDKjbL0cDlWzppoC9DDRgkjP+pMyZyBBrw2UifQrZkPOnGBMEPOg3a+u414tcKo8iF9rcRJ+TE/0Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rdwLtorY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rdwLtorY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C147EC4CEF8; Sat, 27 Sep 2025 09:41:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966073; bh=HzIZhFYsoiSBj+TBnB6khPNFpiWrBNQ8WWdb4UesiYA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rdwLtorYvHbeOdNEkcp1m0AypZdLUfyKBfrM8opRqaQubdesEd7sZt6TJBD4lE8kJ pRxd/XrPWTRf9B+cbY3DrDxCIaYi+Wui45sGfiVvHWlOva47i13Zt24welyzTa/X8f 65b36t423TihZY15H0gHKLtzbEP3s7Yw+DuARidMWqrQU9U7OouTzP7Xw+TfRjvIbG YhaCxSGFw2kAXtc2eXqP9WNATh/dETB40MLlWGB3NB/WlrFJx09DRM49SCykAGM5zH i4mWcFF7qShqua8pacadqMkBvhiZi+3Re1fV+mWtA6BexpOvBUufTMc69Zh1Uk9Nap Ie4THEbpgCazA== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:41 +0200 Subject: [PATCH net-next 5/8] mptcp: remove unneeded mptcp_move_skb() Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-5-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1190; i=matttbe@kernel.org; h=from:subject:message-id; bh=JNrMkwL33N4F+1s5Xmhp9Td2/aae/RO13IS7/UsLU0Q=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub1RaISl87Ie9pkTP+umrTBl1Decu2VZ1Qohns86iC /wTjoQv6ihlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZjITGtGhhlzzXTiFrwTv1gV MX1KufnEtcXy3+4duL/8x8993kn5c9MZGQ7mBu+L0fpUNTUm+KfcvBDX91UbulYsf5K13HXVen2 n6TwA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni Since commit b7535cfed223 ("mptcp: drop legacy code around RX EOF"), sk_shutdown can't change during the main recvmsg loop, we can drop the related race breaker. Reviewed-by: Geliang Tang Tested-by: Geliang Tang Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/protocol.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 832782e23740d22acda608966c29516666c9b111..26fbd9f6a3f7802c428e79c7f4e= 1da45aa9533e5 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2207,14 +2207,8 @@ static int mptcp_recvmsg(struct sock *sk, struct msg= hdr *msg, size_t len, break; } =20 - if (sk->sk_shutdown & RCV_SHUTDOWN) { - /* race breaker: the shutdown could be after the - * previous receive queue check - */ - if (__mptcp_move_skbs(sk)) - continue; + if (sk->sk_shutdown & RCV_SHUTDOWN) break; - } =20 if (sk->sk_state =3D=3D TCP_CLOSE) { copied =3D -ENOTCONN; --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3348A2DAFBB; Sat, 27 Sep 2025 09:41:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966077; cv=none; b=bMHw+Ms7sTPsNZoh1qjzzRutHHmFOPKlTy8Rg8O3Ru0gIWqo9kcrXhXVgAU22VGx1x7e0DzVNfU2olwhBcydbteC+LsHBwyM3UXoHXeLyUqR0ImxxEY5WwSmAcS8wZZH5tAQUhZnO8iF8jJP9jh8cUTDqawAUTGAJsC9PVxk8Ns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966077; c=relaxed/simple; bh=9mt8KfJKIMQ13MUY35/9cKBcT7o986AsKAS51TAODCs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C53gdxvO4hC6twn46C6u2VxiwBcP8+XelJUenzkOj/f3JJJBl9dqwS3yxG/clIHzcS5W+YQa556lW1yQ4XCUHv3hbZiqdIJ2J0bdlDMqkf+lXncTpnsDnkPOIwvKMvVicM5FTStDHC/ycQ8X+f5IsYgrWtIBhpwwsEhDNTDCNgc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UOgZ8njG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UOgZ8njG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F08BCC113CF; Sat, 27 Sep 2025 09:41:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966076; bh=9mt8KfJKIMQ13MUY35/9cKBcT7o986AsKAS51TAODCs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UOgZ8njGt+hhafvOEcWt54w3x50UEczYm5DKsIhSWOxm5y1RQkzcY6BCzxd8OWQ8w n5YG5q0PuhkB9WuFe68WpCdGVzU4Ok2K4lj0OdWV/uZ8WDD0XAtKUIcn4geYGJ23Wq DpteTwLEqR8kDWCci6cEZEunENJUgqUXgDBFY5rDFQOm3w7BWp/u+bUQQBh3yzlZwe bLIdzaTBSA3SqJ6obfESEnYtKpe7veuZu/GVGBoOYl4Aar1/GpyR2MYQcKS6EzXKdo e0m/x2MhG40GyrQ/fhSKsOt6NzICrXqeLb1f5DORgwZiW4KcE8zQ3BlLmBSZI2dTQ1 Kh6cCrkkUYwKQ== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:42 +0200 Subject: [PATCH net-next 6/8] mptcp: factor out a basic skb coalesce helper Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-6-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2215; i=matttbe@kernel.org; h=from:subject:message-id; bh=FfUYIQjt+din4REyT+qPpnRa3kuyz2Y3/Dt+IRN2mzA=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub1Q+q3yszmnfY90OqXZ15+3TG92bJOcJtVxRbTJTe r58hdznjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgImUBzIyvFQ8JlXxf+f0dZWn L35karXcFC1mc9v86vmFXr3zvlnFxDH8s+LtuPKRb4lwlf1Mdiuu2g1MRkbVDy+dTLr4X93/ttI KBgA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni The upcoming patch will introduced backlog processing for MPTCP socket, and we want to leverage coalescing in such data path. Factor out the relevant bits not touching memory accounting to deal with such use-case. Co-developed-by: Geliang Tang Signed-off-by: Geliang Tang Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/protocol.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 26fbd9f6a3f7802c428e79c7f4e1da45aa9533e5..da21f1807729acdb7d9427a399a= f66286ed125e2 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -142,22 +142,33 @@ static void mptcp_drop(struct sock *sk, struct sk_buf= f *skb) __kfree_skb(skb); } =20 -static bool mptcp_try_coalesce(struct sock *sk, struct sk_buff *to, - struct sk_buff *from) +static bool __mptcp_try_coalesce(struct sock *sk, struct sk_buff *to, + struct sk_buff *from, bool *fragstolen, + int *delta) { - bool fragstolen; - int delta; + int limit =3D READ_ONCE(sk->sk_rcvbuf); =20 if (unlikely(MPTCP_SKB_CB(to)->cant_coalesce) || MPTCP_SKB_CB(from)->offset || - ((to->len + from->len) > (sk->sk_rcvbuf >> 3)) || - !skb_try_coalesce(to, from, &fragstolen, &delta)) + ((to->len + from->len) > (limit >> 3)) || + !skb_try_coalesce(to, from, fragstolen, delta)) return false; =20 pr_debug("colesced seq %llx into %llx new len %d new end seq %llx\n", MPTCP_SKB_CB(from)->map_seq, MPTCP_SKB_CB(to)->map_seq, to->len, MPTCP_SKB_CB(from)->end_seq); MPTCP_SKB_CB(to)->end_seq =3D MPTCP_SKB_CB(from)->end_seq; + return true; +} + +static bool mptcp_try_coalesce(struct sock *sk, struct sk_buff *to, + struct sk_buff *from) +{ + bool fragstolen; + int delta; + + if (!__mptcp_try_coalesce(sk, to, from, &fragstolen, &delta)) + return false; =20 /* note the fwd memory can reach a negative value after accounting * for the delta, but the later skb free will restore a non --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60DB12D6E60; Sat, 27 Sep 2025 09:41:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966081; cv=none; b=b+oDnipB27sYcWYsR4CwC5RAOaDTxTO+9KueeE39rzuK5gREEPdz6hBCsrF7RkQf2Mu++WmyXWhg7sgovh+bPuwQYmQpdqBeYQrUInb3EJXHY5CC8OtRVlT5MdPCBrpwMorJdQ9q+6UVLCgOYyNMEy5OcPNalOT2t86QeFD8rdc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966081; c=relaxed/simple; bh=uK4MTHtrQ6SSERaqWiaD+OwnrKXL/vfvHTtfjRnIhoU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QasK16P2R7iJaqenQyVp7qoAF8JTTx1cAHLFSBfEy9QifpKTfF5DmUdHj9F8waFQ3f4eGlidIM4PZIJmmTHXyhFCIM2d4j9NW2Z2VyDydKcMrRiBAwycaEPUVURDpfuwZEMF9WrxCfBTY4WNUE5VK636Sl49msY8VF6HpCdx7EQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bc/oP+wd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bc/oP+wd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2BB05C113D0; Sat, 27 Sep 2025 09:41:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966079; bh=uK4MTHtrQ6SSERaqWiaD+OwnrKXL/vfvHTtfjRnIhoU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bc/oP+wduWCLociejsEq6sffhFWTRbGsRK+vQmRegtwZP4lU3ZKYW1DuKAs5OdUPJ 9GT3GSi5DT0neV9XQeWOcizE0gEdnXkHiFJXzsNcK+ukBamP77pw+5zXfaVvLGx0YP q4Xtqz0WbKvPa3bCUcRQrfIRKx1o4NEhCrqT9LLdjN8ek94YIxNquKN+ftUxVwZ1PF DzY94DIMNW7L+9+NYnFpLPFdYrDg0yAmD5sCATrs7xUmvJdZU6EnURLGUWugMsbKRh TY67OrPFL3HOlZWy7QOdTbz4Kz6CYg+3aMjxtg9D3RIBKt22y69plB60Fzz9k/Ctm1 XpBW5v5ypsUuw== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:43 +0200 Subject: [PATCH net-next 7/8] mptcp: minor move_skbs_to_msk() cleanup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-7-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1380; i=matttbe@kernel.org; h=from:subject:message-id; bh=ebLihUpgIkWVECJiN9CNG9hKMwQHMYtGGDf7BTsq9yA=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub1RpU51gIF+3TcTcSm5vx9E1YsYZ5Z3sJ99NFpvwo jHg5GzpjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgInMn87wz07n9MX1RWFWN67c yJu/mUuPK0jLVduW+43K8qOv9a7/aGBkaDPZLntjRtbzFcIH9jAyGTOuXmXZYZ4zuX62kri/UKQ LPwA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Paolo Abeni Such function is called only by __mptcp_data_ready(), which in turn is always invoked when msk is not owned by the user: we can drop the redundant, related check. Additionally mptcp needs to propagate the socket error only for current subflow. Reviewed-by: Geliang Tang Tested-by: Geliang Tang Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/protocol.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index da21f1807729acdb7d9427a399af66286ed125e2..0292162a14eedffde166cc2a2d4= eaa7c3aa6760d 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -814,12 +814,8 @@ static bool move_skbs_to_msk(struct mptcp_sock *msk, s= truct sock *ssk) =20 moved =3D __mptcp_move_skbs_from_subflow(msk, ssk); __mptcp_ofo_queue(msk); - if (unlikely(ssk->sk_err)) { - if (!sock_owned_by_user(sk)) - __mptcp_error_report(sk); - else - __set_bit(MPTCP_ERROR_REPORT, &msk->cb_flags); - } + if (unlikely(ssk->sk_err)) + __mptcp_subflow_error_report(sk, ssk); =20 /* If the moves have caught up with the DATA_FIN sequence number * it's time to ack the DATA_FIN and change socket state, but --=20 2.51.0 From nobody Wed Oct 1 21:27:15 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E6B12D6E60; Sat, 27 Sep 2025 09:41:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966084; cv=none; b=rG/8hK3J03CtpGMBp+b8jBPnYB+zRcJV3MEdDaK1NHQSng9FN0Oxc2IQvweXRk5MqtjXmceTSab8jLNE+pLvW4hg1NHavJ+zihzsT4LoyISGUT9X1JZ8QyvxSDMfATLAdjJabz047YFGcGzJujL/65/ZfM+tg3+GHtPZsdfgdCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758966084; c=relaxed/simple; bh=rKTMd7KxeZgkBmvTha+kogxTXlWFl1nRxlgkXTcuuY8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cDjN/JzZhYExEkdX+qglW62gqh5eRBt65fUQi4/c+sGYm0A9dYp7kWxG8rL+284Iu0qndOOuLkVtFOQeAX4CMnnfYmItL5argUAztdavSOhxdlbF9ga075Qt2NmGVxzAcXO/RZJUnDbSlMn9iZmews3Ne6PJuoxyYb0m2e8xrm8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UwXKnQc1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UwXKnQc1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5BB92C4CEF8; Sat, 27 Sep 2025 09:41:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758966083; bh=rKTMd7KxeZgkBmvTha+kogxTXlWFl1nRxlgkXTcuuY8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UwXKnQc1cdo8zQhNeBc3hhv4ZH/doxEGdmgPpQ62maKclLm5Lk1+KyER4V4mNTOXc RZVWmxkc/w76Yb8GByjqb9DhC9Dlx1CBss62HjvF6hP3xwjhMfYZVi81V+UJgZSu7M C+H6DNHFUjTTSu69DafJIQSrJEsNErWPY9ISGhCIfOLGbx86lAIB7MyrfUZEDy7nlY 8fap4sRdRdf0Dz8YgNRZupLoUtRurgBSOkgHiy/4OVojGd+c4Qoo9BbMBlodV2iy04 yG6Ewp+iFqWZmAacmLY2YEfXa4yWNNjIEG3KhmFVdlwT5Rl4MHJLlPkRA+iUsaBaAx EHbKNZT0cwSDQ== From: "Matthieu Baerts (NGI0)" Date: Sat, 27 Sep 2025 11:40:44 +0200 Subject: [PATCH net-next 8/8] selftests: mptcp: join: validate new laminar endp Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250927-net-next-mptcp-rcv-path-imp-v1-8-5da266aa9c1a@kernel.org> References: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> In-Reply-To: <20250927-net-next-mptcp-rcv-path-imp-v1-0-5da266aa9c1a@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Neal Cardwell , Kuniyuki Iwashima , David Ahern , Shuah Khan Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5241; i=matttbe@kernel.org; h=from:subject:message-id; bh=rKTMd7KxeZgkBmvTha+kogxTXlWFl1nRxlgkXTcuuY8=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDKub1SLq/i7R1av9uEui5LIZb5qJf8mLbjfef6Dpx6zT p28QdypjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgImECDEyHNJIyV79957v24k2 jo8PLLiwXL2Ua8+HdTskBGo11Y2EohgZzrTZxu56JigzYdWF+c9n5jQVJN2YnrHsb1ue1BU/52W 5rAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Here are a few sub-tests for mptcp_join.sh, validating the new 'laminar' endpoint type. In a setup where subflows created using the routing rules would be rejected by the listener, and where the latter announces one IP address, some cases are verified: - Without any 'laminar' endpoints: no new subflows are created. - With one 'laminar' endpoint: a second subflow is created. - With multiple 'laminar' endpoints: 2 IPv4 subflows are created. - With one 'laminar' endpoint, but the server announcing a second IP address, only one subflow is created. - With one 'laminar' + 'subflow' endpoint, the same endpoint is only used once. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 69 +++++++++++++++++++++= ++++ tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 9 ++++ 2 files changed, 78 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index a94b3960ad5e009dbead66b6ff2aa01f70aa3e1f..c90d8e8b95cbb6ba80f79208d1c= c844673f2c249 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -2320,6 +2320,74 @@ signal_address_tests() fi } =20 +laminar_endp_tests() +{ + # no laminar endpoints: routing rules are used + if reset_with_tcp_filter "without a laminar endpoint" ns1 10.0.2.2 REJECT= && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 2 2 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal + run_tests $ns1 $ns2 10.0.1.1 + join_syn_tx=3D1 \ + chk_join_nr 0 0 0 + chk_add_nr 1 1 + fi + + # laminar endpoints: this endpoint is used + if reset_with_tcp_filter "with a laminar endpoint" ns1 10.0.2.2 REJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 2 2 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal + pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 + fi + + # laminar endpoints: these endpoints are used + if reset_with_tcp_filter "with multiple laminar endpoints" ns1 10.0.2.2 R= EJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 2 2 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal + pm_nl_add_endpoint $ns2 dead:beef:3::2 flags laminar + pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar + pm_nl_add_endpoint $ns2 10.0.4.2 flags laminar + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 2 2 2 + chk_add_nr 2 2 + fi + + # laminar endpoints: only one endpoint is used + if reset_with_tcp_filter "single laminar endpoint" ns1 10.0.2.2 REJECT && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 2 2 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal + pm_nl_add_endpoint $ns1 10.0.3.1 flags signal + pm_nl_add_endpoint $ns2 10.0.3.2 flags laminar + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 2 2 + fi + + # laminar endpoints: subflow and laminar flags + if reset_with_tcp_filter "sublow + laminar endpoints" ns1 10.0.2.2 REJECT= && + mptcp_lib_kallsyms_has "mptcp_pm_get_endp_laminar_max$"; then + pm_nl_set_limits $ns1 0 4 + pm_nl_set_limits $ns2 2 4 + pm_nl_add_endpoint $ns1 10.0.2.1 flags signal + pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,laminar + pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,laminar + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 + fi +} + link_failure_tests() { # accept and use add_addr with additional subflows and link loss @@ -4109,6 +4177,7 @@ all_tests_sorted=3D( f@subflows_tests e@subflows_error_tests s@signal_address_tests + L@laminar_endp_tests l@link_failure_tests t@add_addr_timeout_tests r@remove_tests diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index d4981b76693bbddca74169437a540ad6294cf1d5..65b374232ff5ac06876dcd621fd= 2109c4d82cd12 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -830,6 +830,8 @@ int add_addr(int fd, int pm_family, int argc, char *arg= v[]) flags |=3D MPTCP_PM_ADDR_FLAG_SUBFLOW; else if (!strcmp(tok, "signal")) flags |=3D MPTCP_PM_ADDR_FLAG_SIGNAL; + else if (!strcmp(tok, "laminar")) + flags |=3D MPTCP_PM_ADDR_FLAG_LAMINAR; else if (!strcmp(tok, "backup")) flags |=3D MPTCP_PM_ADDR_FLAG_BACKUP; else if (!strcmp(tok, "fullmesh")) @@ -1018,6 +1020,13 @@ static void print_addr(struct rtattr *attrs, int len) printf(","); } =20 + if (flags & MPTCP_PM_ADDR_FLAG_LAMINAR) { + printf("laminar"); + flags &=3D ~MPTCP_PM_ADDR_FLAG_LAMINAR; + if (flags) + printf(","); + } + if (flags & MPTCP_PM_ADDR_FLAG_BACKUP) { printf("backup"); flags &=3D ~MPTCP_PM_ADDR_FLAG_BACKUP; --=20 2.51.0