From nobody Wed Sep 17 18:16:52 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 14F341DF26B for ; Sun, 13 Jul 2025 09:43:55 +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=1752399837; cv=none; b=jZfPBcmI5y/K2ZnqJZ/UlqoyAPj0PT35xVdeRH1UchiyafcwxEYGti2+n1/evORHjgSLawHAmJedeEuLRrqkLP08Jn4DUwOjvPrDpSs21KYYWz3cwvJ2JTw+hZ9PjE9P8AgQ99tgT07BKgB32VF/S2Ds4kUmQMmvxzliFxSoMS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399837; c=relaxed/simple; bh=20do/M+FED549W6DKGJEOIhn4PWQQUwjPwuQVSx6Vrs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aJG9G5rAxUdpRRYDsdcflJoDqNmoCrj6g6M6yESQT95b2An0T3DNPqXDCRaJJeX7eyxSGaiW1atYp3qidk8FnEU3lqJu1WpMW3LqGwMZRGuTZiPsSBKYV5G8MkF2N0d0VJ7IHLiu9o1bKrcoGWPPwjFPEzGK9vgV9XzrHiXL6js= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XvQUmH8w; 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="XvQUmH8w" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AAB06C4CEF5; Sun, 13 Jul 2025 09:43:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399835; bh=20do/M+FED549W6DKGJEOIhn4PWQQUwjPwuQVSx6Vrs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XvQUmH8wsA5ljRzpBPTqY6bxHr87zWiIl6zDkt5MJkyBTtoqCOttLktD/TElUFTPC WE0cuAm6Mw+b9XPMLlHAgINrbNxLhk7h+P30PjQ+SSD++g474pVaaUMcrbAlG1JVmj Qrt0DS+EvnrB2h3RW7ial1wTs14ck0dWMTOrXKI1jVCC+i3WfBWNmT1cUdmmUYLk4J 4OJPsQayaVNnlVpA/Ft5AvEcSuOKYSMLewVQB75fAhLWcJbanfqFMv7nGIEyxBmVH6 sfK3g65IxIja7wlKhbosHUGD3f/AaTU8IQPPQJEIGi0bVKcBexKn+38a/qzgeG/4te 4o0vmN3tAqhDw== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v9 1/9] mptcp: add eat_recv_skb helper Date: Sun, 13 Jul 2025 17:43:41 +0800 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch extracts the free skb related code in __mptcp_recvmsg_mskq() into a new helper mptcp_eat_recv_skb(). Use sk_eat_skb() in this helper instead of open-coding it. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 4b510e04724f..c2233802b7a1 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1871,6 +1871,15 @@ static int mptcp_sendmsg(struct sock *sk, struct msg= hdr *msg, size_t len) =20 static void mptcp_rcv_space_adjust(struct mptcp_sock *msk, int copied); =20 +static void mptcp_eat_recv_skb(struct sock *sk, struct sk_buff *skb) +{ + /* avoid the indirect call, we know the destructor is sock_wfree */ + skb->destructor =3D NULL; + atomic_sub(skb->truesize, &sk->sk_rmem_alloc); + sk_mem_uncharge(sk, skb->truesize); + sk_eat_skb(sk, skb); +} + static int __mptcp_recvmsg_mskq(struct sock *sk, struct msghdr *msg, size_t len, int flags, @@ -1913,12 +1922,7 @@ static int __mptcp_recvmsg_mskq(struct sock *sk, } =20 if (!(flags & MSG_PEEK)) { - /* avoid the indirect call, we know the destructor is sock_wfree */ - skb->destructor =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); + mptcp_eat_recv_skb(sk, skb); msk->bytes_consumed +=3D count; } =20 --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 4E692225779 for ; Sun, 13 Jul 2025 09:43:57 +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=1752399837; cv=none; b=cnII9wFamB6tXhXqiJNBL5deSyHrWlwkcHPqENvf6qj2b6hXhoCWhwhLUvGTWbd0GZm7RN97GXxMPBOc/iPXrH1X8t78JAf1pkgy3rYoE2YgjU5a/1CJZLKelCQmjfnYFX0DNrB4saie5NA4dn/W7EAhZMYjRdKbEcpZBb9M2Q8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399837; c=relaxed/simple; bh=ztJ5v23SP8lHnncz0rUEiEDmaOQASV5sx52Y3nV4qog=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AtpHVQ8TqKW3GfMyMpsgS+XgXSz8XeiOTJEp8ZivWNu7t+jX6bblHeUOA8G25YRfSANTlW8bpE3MDlU8t0PUy17AmZEvqJ2JmUryFlBU+wBmfHnkBU/DvATlw99IsK6weGVdNSFc+g/tuOrtYmJ1yxZjYR5hWuMxLEeyk3ndo9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jKmaIZpG; 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="jKmaIZpG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3994AC4CEF6; Sun, 13 Jul 2025 09:43:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399837; bh=ztJ5v23SP8lHnncz0rUEiEDmaOQASV5sx52Y3nV4qog=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jKmaIZpGdHX4p4fuQZM2mlttXSNWYBZ0rnGRFa1+iQdInapre6CJDkmzqAcUAjuqv K26S0JKk0qonE4b84VayIOL7BZyxXgxf76S4HCaY/c7RMe3Yy3JLIMY8eHFH7uXavP zfHIof5Ohk2CQQHpcVhdK1Udxb2o0vGIyBTBw6gHeRHpwSh80i03NULXUNUXgJVfQI MVgv6Oq9NttiEnFVJudeTpRRqznmYs7zuL5Ssc4y5pYd1imcag1GP3alZ/cWUQN6Dw V5L+1Ff8CssvxZQCjQAzdKAXbqOsRthdaHogVmagQpBpDURMBAzBBjy0GuFAFjr4iA c9F+XM5V+Kn+A== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v9 2/9] mptcp: implement .read_sock Date: Sun, 13 Jul 2025 17:43:42 +0800 Message-ID: <3a2ccde3aab3a874a4c6738615053f0e7734a047.1752399660.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang nvme_tcp_try_recv() needs to call .read_sock interface of struct proto_ops, but it's not implemented in MPTCP. This patch implements it with reference to __tcp_read_sock() and __mptcp_recvmsg_mskq(). Corresponding to tcp_recv_skb(), a new helper for MPTCP named mptcp_recv_skb() is added to peek a skb from sk->sk_receive_queue. Compared with __mptcp_recvmsg_mskq(), mptcp_read_sock() uses sk->sk_rcvbuf as the max read length. The LISTEN status is checked before the while loop, and mptcp_recv_skb() and mptcp_cleanup_rbuf() are invoked after the loop. In the loop, all flags checks for __mptcp_recvmsg_mskq() are removed. Reviewed-by: Hannes Reinecke Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 62 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index c2233802b7a1..288f989ab078 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -4017,6 +4017,66 @@ static __poll_t mptcp_poll(struct file *file, struct= socket *sock, return mask; } =20 +static struct sk_buff *mptcp_recv_skb(struct sock *sk) +{ + if (skb_queue_empty(&sk->sk_receive_queue)) + __mptcp_move_skbs(sk); + return skb_peek(&sk->sk_receive_queue); +} + +/* + * Note: + * - It is assumed that the socket was locked by the caller. + */ +static int mptcp_read_sock(struct sock *sk, read_descriptor_t *desc, + sk_read_actor_t recv_actor) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + size_t len =3D sk->sk_rcvbuf; + struct sk_buff *skb; + int copied =3D 0; + + if (sk->sk_state =3D=3D TCP_LISTEN) + return -ENOTCONN; + while ((skb =3D mptcp_recv_skb(sk)) !=3D NULL) { + u32 offset =3D MPTCP_SKB_CB(skb)->offset; + u32 data_len =3D skb->len - offset; + u32 size =3D min_t(size_t, len - copied, data_len); + int count; + + count =3D recv_actor(desc, skb, offset, size); + if (count <=3D 0) { + if (!copied) + copied =3D count; + break; + } + + copied +=3D count; + + if (count < data_len) { + MPTCP_SKB_CB(skb)->offset +=3D count; + MPTCP_SKB_CB(skb)->map_seq +=3D count; + msk->bytes_consumed +=3D count; + break; + } + + mptcp_eat_recv_skb(sk, skb); + msk->bytes_consumed +=3D count; + + if (copied >=3D len) + break; + } + + mptcp_rcv_space_adjust(msk, copied); + + if (copied > 0) { + mptcp_recv_skb(sk); + mptcp_cleanup_rbuf(msk, copied); + } + + return copied; +} + static const struct proto_ops mptcp_stream_ops =3D { .family =3D PF_INET, .owner =3D THIS_MODULE, @@ -4037,6 +4097,7 @@ static const struct proto_ops mptcp_stream_ops =3D { .recvmsg =3D inet_recvmsg, .mmap =3D sock_no_mmap, .set_rcvlowat =3D mptcp_set_rcvlowat, + .read_sock =3D mptcp_read_sock, }; =20 static struct inet_protosw mptcp_protosw =3D { @@ -4141,6 +4202,7 @@ static const struct proto_ops mptcp_v6_stream_ops =3D= { .compat_ioctl =3D inet6_compat_ioctl, #endif .set_rcvlowat =3D mptcp_set_rcvlowat, + .read_sock =3D mptcp_read_sock, }; =20 static struct proto mptcp_v6_prot; --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 C8A0B225779 for ; Sun, 13 Jul 2025 09:43:58 +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=1752399838; cv=none; b=VMR0TFQAJYSaboutimkuiCPG3O8UHIvsIYi1l3Y9b/s2bZ7UkLQzgDuKe3i2BWMdgQXom7eKqpkJsSzAeHh7pEQMkW9pkrb2iyan1rxKMzo8fZSkllrJvsU7rftOQieXXZNAoAFHGSvvA8BPx2/m0XwgVUSUsri+YkU8GFwUDOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399838; c=relaxed/simple; bh=AJvHHEUgPwIfbiffHalaneXA5BZELWoGjQehMawpHM0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KzxdfWF6JmBi11NBhYqhhz+IEZpz3KIujxD7egkqTLejmKoF5M8rKis8wo3RSjBy9e99geCdqxN/PmrjuHU7Ch0lbaxl27/Gd3etXOhh2E0Bls0b2gc5IZzC6qi20eG1LUrAJScAHf/UP77v1VRsPEh13GRlxz/FtUs2EBM4DRM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dtPbOfJ8; 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="dtPbOfJ8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A334DC4CEF7; Sun, 13 Jul 2025 09:43:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399838; bh=AJvHHEUgPwIfbiffHalaneXA5BZELWoGjQehMawpHM0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dtPbOfJ8tRQ+lS2YPLV2pW4PT9r8dg90A/rRXNSkBC7AczlXlyPv4+sJ9ydAibfe4 0duiKkpeuTDPMVRqDmB99EGzqafJK+0sijbX1I43qPNHPLmidm/AtSMN2wZb1tfiNq U18vt/FK8fgma0l1bF4M4P12GEWwGXBQCt74Yhpka65kh4V7PPHJe8bzcSillqXWNK y86zeWuBZ4800cTuDxr/QISis6u24xGkxRCxB2T9uqYn7ZnURth3nr9wGwWEXPnjS/ pS0yv+TDlMUqWYuAuvhQcpR4zCwJnyuVuf4RcxLikoVUXLCFuE0AIWzXFjtmfF14w0 /UjiCdbfAupGw== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v9 3/9] tcp: drop release and lock again in splice_read Date: Sun, 13 Jul 2025 17:43:43 +0800 Message-ID: <36dba482a6f8669135ff23e8c3b2f614ab49a262.1752399660.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang In the main loop of tcp_splice_read(), release_sock() is invoked to release the socket lock, and then lock_sock() is immediately invoked to hold the socket lock again. It looks like these two calls are useless, so let's drop them. Signed-off-by: Geliang Tang --- net/ipv4/tcp.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 5aafe569d4d0..c81866ec4333 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -866,8 +866,6 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *pp= os, =20 if (!tss.len || !timeo) break; - release_sock(sk); - lock_sock(sk); =20 if (sk->sk_err || sk->sk_state =3D=3D TCP_CLOSE || (sk->sk_shutdown & RCV_SHUTDOWN) || --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 A02181DF26B for ; Sun, 13 Jul 2025 09:44: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=1752399840; cv=none; b=eSZlUpt5n+XPboBoX4OQEUlBwKaG6Wkn5CkovGR5PzH/lCFXBanhUqaBvT7J34THkMWOT5ZKeXWv8mVekcniIumlSYOXXIFMBJwXodjXfH7YHwBxIEhcviWTUudu9X5ndQqAVpdry6lCEbdvXTI3TIVTADvKrNJTOqqiNNZ2fCc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399840; c=relaxed/simple; bh=A+AWwBWTxht1ZZgtIKeQmVyErtyqPvb5QBqgQ5ist0U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FpWI9+HNYko6VRVdn+a1pYM4M++0FmQ4LAsoP0bewmRuJbLytANrC3kRagxVKAbC/LJwwA6+Or6nxdJJOpUXnHeCo8VvdQc3W4D2sqY/v75V0iX4fBD2/5IMo9/jvZZ4AliMAb5wnS7U+zUR+NVLhByGS294k2tTL9qpJxiWAW4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LuGAmtMK; 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="LuGAmtMK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 31BDDC4CEE3; Sun, 13 Jul 2025 09:43:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399840; bh=A+AWwBWTxht1ZZgtIKeQmVyErtyqPvb5QBqgQ5ist0U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LuGAmtMKWVfXubnUXj75k9oi9ZooTPRgTD4nwsn/XjvETMzwAkS/emmom478qWEsC dr0eYDXySR4O56wLez5XKw1fkDaXnGjXglf4Gg1UKAlQ6q1yWQFm3Vxyhh2NkoURxt 6ow4jXoKmUCZXPSazBWt4xcdzG5Y8VIlDGS+Wl5qWsOJ/Oq6XYoPNveBbK03XMd5Ne dgoJRTF7tA6CqRP/ChR2KuloqEx8D+jhr+0qo5mQm72E6Q1wgN/JBA9jYe2iAPq7ky k9KB6KFzCaSzZv5SCkiRSHLJS1LHy5hMgRuJ7z1fmeFTGpjO7YbT2mwzmlFmGY8x6j GcyQNRKr2xPzQ== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang , Paolo Abeni Subject: [PATCH mptcp-next v9 4/9] tcp: export splice_state and splice_data_recv Date: Sun, 13 Jul 2025 17:43:44 +0800 Message-ID: <205dd08e07f29a6a7957112736ed0b7e32eba647.1752399660.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Export struct tcp_splice_state and tcp_splice_data_recv() in net/tcp.h so that they can be used by MPTCP. Suggested-by: Paolo Abeni Signed-off-by: Geliang Tang --- include/net/tcp.h | 12 ++++++++++++ net/ipv4/tcp.c | 13 ++----------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index bc08de49805c..338b97a91278 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -258,6 +258,18 @@ static_assert((1 << ATO_BITS) > TCP_DELACK_MAX); */ #define TFO_SERVER_WO_SOCKOPT1 0x400 =20 +/* + * TCP splice context + */ +struct tcp_splice_state { + struct pipe_inode_info *pipe; + size_t len; + unsigned int flags; +}; + +int tcp_splice_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, + unsigned int offset, size_t len); + =20 /* sysctl variables for tcp */ extern int sysctl_tcp_max_orphans; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index c81866ec4333..a9af4677051e 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -316,15 +316,6 @@ EXPORT_SYMBOL(tcp_have_smc); struct percpu_counter tcp_sockets_allocated ____cacheline_aligned_in_smp; EXPORT_IPV6_MOD(tcp_sockets_allocated); =20 -/* - * TCP splice context - */ -struct tcp_splice_state { - struct pipe_inode_info *pipe; - size_t len; - unsigned int flags; -}; - /* * Pressure flag: try to collapse. * Technical note: it is used by multiple contexts non atomically. @@ -757,8 +748,8 @@ void tcp_push(struct sock *sk, int flags, int mss_now, __tcp_push_pending_frames(sk, mss_now, nonagle); } =20 -static int tcp_splice_data_recv(read_descriptor_t *rd_desc, struct sk_buff= *skb, - unsigned int offset, size_t len) +int tcp_splice_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, + unsigned int offset, size_t len) { struct tcp_splice_state *tss =3D rd_desc->arg.data; int ret; --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 AFA0F1DF26B for ; Sun, 13 Jul 2025 09:44:02 +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=1752399842; cv=none; b=JsOM8/TbFiu2gNRpcR6/vFXwtkOJXmKiWpuCG4rU9NmsQ+9TyWlFTz3o2pwjNtN62FfkPNKULAUdTAgjcjjgn03AhQbFcqg609BGdMdVeE4VauPkLS1Ax4Vm8mzzKbIS5zXhw1cpocGP0ODZTHltoExjMFngwGj5evmYZTfmcDs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399842; c=relaxed/simple; bh=BVXVSmHggjfzmaDQJcG9Db2Qhxwzr0415CgH7PHw0QM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hljtFuWNE24KCOZVuWpVpbkcqi05/sPWMY2ZM356Qr23ZncEGLtcBt4W1sC2JzdM06fViutwRHp6HxIV503M2Ly0j7AnzXZmIY54w9pi9/4WXsXoGS56VXhHHZaFasrQzgJaxXi1YYeYebH33OfHLO1w6iPKMqoUQ2/Z64vQn20= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FeYsNOaK; 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="FeYsNOaK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0BC3BC4CEE3; Sun, 13 Jul 2025 09:44:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399842; bh=BVXVSmHggjfzmaDQJcG9Db2Qhxwzr0415CgH7PHw0QM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FeYsNOaKLVkPJpbJbjYiWyUxbGqqrdvajrny4rl6f7JCgDQGFwHlnJiEzgGCw/HuN PoXh/8HrILOoMdWvujizahrbq/nKb/xd6rfwuLqPmBzWqW5b5vhUx7ScwJlM7ivWVH GTubw1pZIf5+SkJx58y+bLKDn6czLocgdU2P16wnQjEgsWaaqG77aBN8+yhQPCA4jN hzJuWCwbcQ5rucICUJQNV5P30IZU/dxeO239YgAZcd3jxU5EhXVuNrxHHPUr74MOoz Q0FwYBKJMMZ4llPziVPLx+aIdlbN7bgqFGn5ovlxoaQez8AF0eVxJOfQzqaMOCUYwA hBlEhXqg9Wndw== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang , Paolo Abeni Subject: [PATCH mptcp-next v9 5/9] tcp: add recv_should_stop helper Date: Sun, 13 Jul 2025 17:43:45 +0800 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Factor out a new helper tcp_recv_should_stop() from tcp_recvmsg_locked() and tcp_splice_read() to check whether to stop receiving. It will be used for MPTCP too. Suggested-by: Paolo Abeni Signed-off-by: Geliang Tang --- include/net/tcp.h | 23 +++++++++++++++ net/ipv4/tcp.c | 75 ++++++++--------------------------------------- 2 files changed, 35 insertions(+), 63 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 338b97a91278..bb1628c0b070 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -270,6 +270,29 @@ struct tcp_splice_state { int tcp_splice_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len); =20 +static inline int tcp_recv_should_stop(struct sock *sk, long timeo) +{ + if (sock_flag(sk, SOCK_DONE)) + return -ENETDOWN; + + if (sk->sk_err) + return sock_error(sk); + + if (sk->sk_shutdown & RCV_SHUTDOWN) + return -ESHUTDOWN; + + if (sk->sk_state =3D=3D TCP_CLOSE) + return -ENOTCONN; + + if (!timeo) + return -EAGAIN; + + if (signal_pending(current)) + return sock_intr_errno(timeo); + + return 0; +} + =20 /* sysctl variables for tcp */ extern int sysctl_tcp_max_orphans; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index a9af4677051e..b0cb773ab4e7 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -796,7 +796,7 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *pp= os, }; long timeo; ssize_t spliced; - int ret; + int ret, err; =20 sock_rps_record_flow(sk); /* @@ -817,24 +817,10 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *= ppos, else if (!ret) { if (spliced) break; - if (sock_flag(sk, SOCK_DONE)) - break; - if (sk->sk_err) { - ret =3D sock_error(sk); - break; - } - if (sk->sk_shutdown & RCV_SHUTDOWN) - break; - if (sk->sk_state =3D=3D TCP_CLOSE) { - /* - * This occurs when user tries to read - * from never connected socket. - */ - ret =3D -ENOTCONN; - break; - } - if (!timeo) { - ret =3D -EAGAIN; + err =3D tcp_recv_should_stop(sk, timeo); + if (err < 0) { + if (err !=3D -ESHUTDOWN && err !=3D -ENETDOWN) + ret =3D err; break; } /* if __tcp_splice_read() got nothing while we have @@ -846,21 +832,15 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *= ppos, ret =3D sk_wait_data(sk, &timeo, NULL); if (ret < 0) break; - if (signal_pending(current)) { - ret =3D sock_intr_errno(timeo); - break; - } continue; } tss.len -=3D ret; spliced +=3D ret; =20 - if (!tss.len || !timeo) + if (!tss.len) break; =20 - if (sk->sk_err || sk->sk_state =3D=3D TCP_CLOSE || - (sk->sk_shutdown & RCV_SHUTDOWN) || - signal_pending(current)) + if (tcp_recv_should_stop(sk, timeo)) break; } =20 @@ -2697,42 +2677,11 @@ static int tcp_recvmsg_locked(struct sock *sk, stru= ct msghdr *msg, size_t len, if (copied >=3D target && !READ_ONCE(sk->sk_backlog.tail)) break; =20 - if (copied) { - if (!timeo || - sk->sk_err || - sk->sk_state =3D=3D TCP_CLOSE || - (sk->sk_shutdown & RCV_SHUTDOWN) || - signal_pending(current)) - break; - } else { - if (sock_flag(sk, SOCK_DONE)) - break; - - if (sk->sk_err) { - copied =3D sock_error(sk); - break; - } - - if (sk->sk_shutdown & RCV_SHUTDOWN) - break; - - if (sk->sk_state =3D=3D TCP_CLOSE) { - /* This occurs when user tries to read - * from never connected socket. - */ - copied =3D -ENOTCONN; - break; - } - - if (!timeo) { - copied =3D -EAGAIN; - break; - } - - if (signal_pending(current)) { - copied =3D sock_intr_errno(timeo); - break; - } + err =3D tcp_recv_should_stop(sk, timeo); + if (err < 0) { + if (!copied && err !=3D -ESHUTDOWN && err !=3D -ENETDOWN) + copied =3D err; + break; } =20 if (copied >=3D target) { --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 DA5FE1DF26B for ; Sun, 13 Jul 2025 09:44:03 +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=1752399843; cv=none; b=cX9EkD6n9bpf3ueAz7hbdDELrhVzdl8rCUImV4FSZl4Jc2FZ+w2pQFuDVvvzxqIw97PpGNJoskfELS9DQqotmSlG7NNmVyrB9yyp7MQXVEcw1M7y+tL68KzlU0C7IUUD29IQ1y8TJFYUHxdhE/nQGFiL1S3x+b+Ro1s7PhbDIOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399843; c=relaxed/simple; bh=MV/FWpIKlWa01YTg8uvSvZal+CVk2HZVBhQsRXm7luw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iopIUqBFrVJjVmrztlelOQl1712G7k/+uQQaW3kcujRRD1mXeb7kbGZQPNubqFtowyifpKHaGQ5ZANg8CHmDzoYzog2UvrSp8lZvEtLXrh+o/SjmEM1e2fGS6XEMTXQKHlJWTO1rR80edZokQ5ob0dLOl9DONUPff3nY+6RsuGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TwtbCuRa; 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="TwtbCuRa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C07B4C4CEF1; Sun, 13 Jul 2025 09:44:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399843; bh=MV/FWpIKlWa01YTg8uvSvZal+CVk2HZVBhQsRXm7luw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TwtbCuRayaR+uvdso86im2925ULrYEzV1zYeTmmomXj8qXUthF34edwgkoFwPqz1n QX43gSqt/BjY7qaIMwnUPyuHZ+A4kXjD3jWuarzt65NRmxe+Jp/nYaF5Z1ubbutZJN 0wNgo7pNPXeLRsz5vhhQXc9ciITvFUBZGA7l1F6VOxfO86rwA3IHkEG8vXkaA/k0Jh RznMN7vmKfQMagLDWh/g0Xl186JorlZ5DvIZ5g0GeCeKmc887gSZzym+YMiL+oLuyx Qzdrw+bNe//GHuuXhxIXCesGU++W0RprnoOopl4qyQBK0FQl05AuCxGKYibvj+TXL+ wLHLB57vGlOcQ== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v9 6/9] mptcp: use recv_should_stop helper Date: Sun, 13 Jul 2025 17:43:46 +0800 Message-ID: <25d992117c64ee5be5fd5101b2faab74fafe60e4.1752399660.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Use the newly added tcp_recv_should_stop() helper in mptcp_recvmsg() to check whether to stop receiving. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 288f989ab078..f94fdf5b164f 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2164,20 +2164,12 @@ static int mptcp_recvmsg(struct sock *sk, struct ms= ghdr *msg, size_t len, if (copied >=3D target) break; =20 - if (copied) { - if (sk->sk_err || - sk->sk_state =3D=3D TCP_CLOSE || - (sk->sk_shutdown & RCV_SHUTDOWN) || - !timeo || - signal_pending(current)) - break; - } else { - if (sk->sk_err) { - copied =3D sock_error(sk); + err =3D tcp_recv_should_stop(sk, timeo); + if (err < 0) { + if (copied) break; - } =20 - if (sk->sk_shutdown & RCV_SHUTDOWN) { + if (err =3D=3D -ESHUTDOWN) { /* race breaker: the shutdown could be after the * previous receive queue check */ @@ -2186,20 +2178,8 @@ static int mptcp_recvmsg(struct sock *sk, struct msg= hdr *msg, size_t len, break; } =20 - if (sk->sk_state =3D=3D TCP_CLOSE) { - copied =3D -ENOTCONN; - break; - } - - if (!timeo) { - copied =3D -EAGAIN; - break; - } - - if (signal_pending(current)) { - copied =3D sock_intr_errno(timeo); - break; - } + copied =3D err; + break; } =20 pr_debug("block timeout %ld\n", timeo); --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 74ABA1DF26B for ; Sun, 13 Jul 2025 09:44:05 +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=1752399845; cv=none; b=XYrKNKj3b6+itMKdj/vui0C9pMbfJHOcNjIJeIq28FzwX/O1QCmAHJHSzfuAzM8/3hX63AeMR1qViHsq/ZM6EZdzMOxJ4HMFoRhyYgfKlhvMuJB3vfSZTdI+HxaKIZ0TbUGF4xjlFY7j4rCIS75Q1QUOgTi963CnaXtfGydmObo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399845; c=relaxed/simple; bh=W1PYDgSHV/67L4CBTMCsD+tixyOfgYoukaVFQEHao9Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PNI1FcdWwNaYzQkufm9TdZQVSVMg1oDpLsdFBkBmBfw58kWLUBq0F9MAqrlXMeMlKdsChbvInGHcOEbXhcavWfGAkvC++IvFQxlw24SWV0kGfLI38gQ6E9ObzqUyK6DQ3T0LyFgx5hRkvQ4I61SbgLgZFqApCkMuFjnZnzPtSI0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EuPCyWDi; 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="EuPCyWDi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4F148C4CEE3; Sun, 13 Jul 2025 09:44:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399845; bh=W1PYDgSHV/67L4CBTMCsD+tixyOfgYoukaVFQEHao9Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EuPCyWDiTIXjoV7gJq7DJiYIXF4gOX2yMrVRBSo7EVXkm8o52FGt4QV7AzEVVlwf1 O3w2+02Bh/CKWGG4AUf8pj76p5f+fOHkGKGoRx6wV3WeqxMmEG8OeqtLv8zMc29M88 mQIOoZ8aApy8C4uHSNplF4Ss/2iICJiqK+Shb5gMFhOH+Iych7ZlYhae/UiwdmAiBP /vIZa4cCrW+Jq6ZUfGVo1/04Mo0bjthBcIsFWP03OpoJ65Nj4+9Izd9VHpsg4P4rdT 6n6jWQHoAE6rIxop94zwPQHnW3blS5vMrnbabwzTbTQ75HhjK1qh2dG2583pcgGP2D 3TmPgvDSMuoYA== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v9 7/9] mptcp: implement .splice_read Date: Sun, 13 Jul 2025 17:43:47 +0800 Message-ID: <0cc23eea2e5089d83de6c4916d781bce0df996aa.1752399661.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch implements .splice_read interface of mptcp struct proto_ops as mptcp_splice_read() with reference to tcp_splice_read(). Corresponding to __tcp_splice_read(), __mptcp_splice_read() is defined, invoking mptcp_read_sock() instead of tcp_read_sock(). mptcp_splice_read() is almost the same as tcp_splice_read(), except for sock_rps_record_flow() and __mptcp_move_skbs(). Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 94 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index f94fdf5b164f..59e282348e48 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -4057,6 +4057,98 @@ static int mptcp_read_sock(struct sock *sk, read_des= criptor_t *desc, return copied; } =20 +static int __mptcp_splice_read(struct sock *sk, struct tcp_splice_state *t= ss) +{ + /* Store TCP splice context information in read_descriptor_t. */ + read_descriptor_t rd_desc =3D { + .arg.data =3D tss, + .count =3D tss->len, + }; + + return mptcp_read_sock(sk, &rd_desc, tcp_splice_data_recv); +} + +/** + * mptcp_splice_read - splice data from MPTCP socket to a pipe + * @sock: socket to splice from + * @ppos: position (not valid) + * @pipe: pipe to splice to + * @len: number of bytes to splice + * @flags: splice modifier flags + * + * Description: + * Will read pages from given socket and fill them into a pipe. + * + **/ +static ssize_t mptcp_splice_read(struct socket *sock, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + struct tcp_splice_state tss =3D { + .pipe =3D pipe, + .len =3D len, + .flags =3D flags, + }; + struct sock *sk =3D sock->sk; + ssize_t spliced =3D 0; + int ret =3D 0, err; + long timeo; + + /* + * We can't seek on a socket input + */ + if (unlikely(*ppos)) + return -ESPIPE; + + lock_sock(sk); + + timeo =3D sock_rcvtimeo(sk, sock->file->f_flags & O_NONBLOCK); + while (tss.len) { + ret =3D __mptcp_splice_read(sk, &tss); + if (ret < 0) { + break; + } else if (!ret) { + if (spliced) + break; + err =3D tcp_recv_should_stop(sk, timeo); + if (err < 0) { + if (err =3D=3D -ESHUTDOWN) { + if (__mptcp_move_skbs(sk)) + continue; + break; + } + ret =3D err; + break; + } + /* if __mptcp_splice_read() got nothing while we have + * an skb in receive queue, we do not want to loop. + * This might happen with URG data. + */ + if (!skb_queue_empty(&sk->sk_receive_queue)) + break; + ret =3D sk_wait_data(sk, &timeo, NULL); + if (ret < 0) + break; + continue; + } + tss.len -=3D ret; + spliced +=3D ret; + + if (!tss.len) + break; + + if (tcp_recv_should_stop(sk, timeo)) + break; + } + + release_sock(sk); + + if (spliced) + return spliced; + + return ret; +} + static const struct proto_ops mptcp_stream_ops =3D { .family =3D PF_INET, .owner =3D THIS_MODULE, @@ -4078,6 +4170,7 @@ static const struct proto_ops mptcp_stream_ops =3D { .mmap =3D sock_no_mmap, .set_rcvlowat =3D mptcp_set_rcvlowat, .read_sock =3D mptcp_read_sock, + .splice_read =3D mptcp_splice_read, }; =20 static struct inet_protosw mptcp_protosw =3D { @@ -4183,6 +4276,7 @@ static const struct proto_ops mptcp_v6_stream_ops =3D= { #endif .set_rcvlowat =3D mptcp_set_rcvlowat, .read_sock =3D mptcp_read_sock, + .splice_read =3D mptcp_splice_read, }; =20 static struct proto mptcp_v6_prot; --=20 2.48.1 From nobody Wed Sep 17 18:16:52 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 4BC05223DFA for ; Sun, 13 Jul 2025 09:44:06 +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=1752399847; cv=none; b=Xy5AG/R5bACVxKDDiswdqCr9IkAMgEezRLYuH4FQIbmACxNAAD4Jgl61my3Kr5Fv4LQN8PZgzxnQRfWu402G28HctunNRbeZeyEOaImZr3S4XB+Oflo1qv5pjZMc99wfcDtuJARitjU/4GVRl9B2lYnxJ+GS71pPdU60bjQ17Ug= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752399847; c=relaxed/simple; bh=qmn/hzWixyaXkO58tn8KmxTlHtv0NRCl4mPohlgGytE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k+A356nnqurBYGgi/0Daf8fE+ZP2p0w7u/fjD96Pl5aQXvWhvgqtxQyLh//1dzBAoeO1VhVEMwMEPaM+sdOpF4uJa1ena80nrL1aA+sehfpO7irqysW51EyukFHWsr4B2Cj4DZmtoSvYo7Pvh3GcOCl5wpWRoImz9OJeIwcnpOc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G4WfeEvI; 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="G4WfeEvI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D283BC4CEF1; Sun, 13 Jul 2025 09:44:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752399846; bh=qmn/hzWixyaXkO58tn8KmxTlHtv0NRCl4mPohlgGytE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G4WfeEvIZKX1sQ0jeSfJGrxAFrbwLPg7C1u9TGsZOooi4u9mxr9v42griOl3zeGvv QL0n0v/ZfHRYISb3U9HamD2fr9o64Kqs1eSWwAhmMDQ+DmbfKm5MbbtBiV9t+VyiVQ Drf2+RF9TLwUB9mdzjX8YJS0xEIt2oLAscEZl8RbZGtxqR9ZRMEInX3Np4/x+O9wKQ ZxmJUaFxtfSQb/WTEOkG3dzAlchyC56+ef36sxihZx1+Mes7/YAVxFI140L/VM1JyB x1hny5Wjpsa04i20fTA6m/EHqNrWAt+agpTM+taiGmGWjgG7u/98CK9tZVJY9zfepo 31ijk6i6FVTXQ== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v9 8/9] selftests: mptcp: add splice io mode Date: Sun, 13 Jul 2025 17:43:48 +0800 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds a new 'splice' io mode for mptcp_connect to test the newly added read_sock() and splice_read() functions of MPTCP. do_splice() efficiently transfers data directly between two file descriptors (infd and outfd) without copying to userspace, using Linux's splice() system call. Usage: ./mptcp_connect.sh -m splice Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_connect.c | 63 ++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/test= ing/selftests/net/mptcp/mptcp_connect.c index ac1349c4b9e5..4c219d620398 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c @@ -51,6 +51,7 @@ enum cfg_mode { CFG_MODE_POLL, CFG_MODE_MMAP, CFG_MODE_SENDFILE, + CFG_MODE_SPLICE, }; =20 enum cfg_peek { @@ -123,7 +124,7 @@ static void die_usage(void) fprintf(stderr, "\t-j -- add additional sleep at connection start and= tear down " "-- for MPJ tests\n"); fprintf(stderr, "\t-l -- listens mode, accepts incoming connection\n"= ); - fprintf(stderr, "\t-m [poll|mmap|sendfile] -- use poll(default)/mmap+writ= e/sendfile\n"); + fprintf(stderr, "\t-m [poll|mmap|sendfile|splice] -- use poll(default)/mm= ap+write/sendfile/splice\n"); fprintf(stderr, "\t-M mark -- set socket packet mark\n"); fprintf(stderr, "\t-o option -- test sockopt