From nobody Thu Nov 5 07:28:15 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793588346; b=uNhrImORjLguFRY30Ll0E0VFH65uw7PNYdO58KNiEcGa1/1y5BMpJQ3O3aFVIZ/4mefU TlWp3BnnO9y59MKIquV8w3i8jcK56TIYfWL7RoFC/O/TzKwD1gf5vuxiBRrR9YK6QCFfk FNb/9OvZIhHV8TAHTJOp60MvXk8iUyJouSa75X3zo1MIlK32LZUWWMdto3Cy9tow+E/mK YsOc63qTQQeBKq8e0wbydO7KOvkOsgu2q2H4F34RZg9MDyW/GDaUSL+i9iJ8ZTaS+fh1I nEq/z74mvcG0b9NYLuhk1JMr6tfUue++JKHscZPf6OXJ2XzcoKW4rMdIZzUxcAxyMBA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793588346; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=FcyZ/23EO9wCaimpG8uixyj/1tWZ+pqjTJz3x+0Dc/c=; b=vbl/fM6QBL4YkVzWEHLw1XGisiHY10UmTkofNfdhdjxusPNs+pEpQ4B7ijHY9AyjS0HB 6rSEo025jAYvjBgNIl2sJv8CzuNmeOoyzt4hSmiNlO71oU6AcyK1DbV3zXdRfBI62ewED TGZQRZcXA1L023kkXfkDqBJqIO47XfUqNbmOy8QY9zpGMTUZGOiInQ5ShkigVKyszrtxd EZGIyKl5idr577n2q0gXX2YoC5Q7lwnkS9X5lxaL+pyvGi0AKWxnvIW/xEyuz/W7xtLqL wKJR0AflcUaEUW86qsqz1+kJzk8S7My7hxzoO5NvJqtJKihFdcw8IRo6B2m5sSH6Uhg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=TEOqH5ni; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F5E5606A324 for ; Mon, 2 Nov 2026 02:59:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=TEOqH5ni Received: by smtp.kernel.org (Postfix) with ESMTPSA id BA9B21F00919; Mon, 2 Nov 2026 02:59:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793588345; bh=FcyZ/23EO9wCaimpG8uixyj/1tWZ+pqjTJz3x+0Dc/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=TEOqH5ni7CWZV9tz4xnNGfBDPtyVFG6N9ssS2HALUAIh1oP3I/xrs2vEuJw3jax8g LimWJE640DJl9VDBCBeWGV7g/xtZQ/3hbqaVV4uF3ml8rBzHm6MXHYd/d0wCMwSAum e1k2F2sJiynak3wM4g4/B694sctkALxwNjjOxmkS6mFGen4IRU58HJFLcmJKJe/gwD Sl4PjiBMIv5cwdY9rKuqdC5jpsNquNwBuFKnTfqQ4XFiPDxEFCjttzUW8JKNTwD3N0 99wXyXlHanI9A1Xkluzk5U15sbUthnViYQjAWOpP9L3fHi9vg53QKFUSytQxr7wElC FU949jIJWh1lA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Gang Yan , Geliang Tang Subject: [PATCH mptcp-next v4 1/5] mptcp: update mptcp_check_readable Date: Mon, 2 Nov 2026 10:58:54 +0800 Message-ID: <79b5374c1e38dcbc2b50f129b4269340352fb44f.1793588257.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.55.0 In-Reply-To: References: X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Gang Yan This patch makes mptcp_check_readable() aligned with TCP, and renames it to mptcp_stream_is_readable(). It will be used in the case of KTLS, because 'prot' will be modified, tls_sw_sock_is_readable() is expected to be called from prot->sock_is_readable(). Co-developed-by: Geliang Tang Signed-off-by: Geliang Tang Signed-off-by: Gang Yan --- net/mptcp/protocol.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 02a4f479d9d8..0caa31525b90 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3476,9 +3476,11 @@ void __mptcp_unaccepted_force_close(struct sock *sk) __mptcp_destroy_sock(sk); } =20 -static __poll_t mptcp_check_readable(struct sock *sk) +static bool mptcp_stream_is_readable(struct sock *sk) { - return mptcp_epollin_ready(sk) ? EPOLLIN | EPOLLRDNORM : 0; + if (mptcp_epollin_ready(sk)) + return true; + return sk_is_readable(sk); } =20 static void mptcp_check_listen_stop(struct sock *sk) @@ -4580,7 +4582,8 @@ static __poll_t mptcp_poll(struct file *file, struct = socket *sock, mask |=3D EPOLLIN | EPOLLRDNORM | EPOLLRDHUP; =20 if (state !=3D TCP_SYN_SENT && state !=3D TCP_SYN_RECV) { - mask |=3D mptcp_check_readable(sk); + if (mptcp_stream_is_readable(sk)) + mask |=3D EPOLLIN | EPOLLRDNORM; if (shutdown & SEND_SHUTDOWN) mask |=3D EPOLLOUT | EPOLLWRNORM; else --=20 2.55.0 From nobody Thu Nov 5 07:28:15 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793588348; b=A9u1YHGUbHCtY0KruB+xPpJyRWa6ZodX43jKjESXRhBzYPQM4BlrJoOLIRv/JK28qt/s u1p0uN53Ur5raITLeRC01KzrHpk4d79Z+WhoFw0C266IZjvQSA+JSKBqj93YMiQvrOmSB 2oTkJ1I8M1BJ3vyIDaIoFCBQQGrV8KpdY5GTHL6YxjA0p07oTjfJ5XFYlAoLsZZ2MN6qU L9tU8lO/GPFGXkLg+A2/GO/Mjks6Snam/RF3wfMcq8yvxmkM395IivUaX5a02/88umOfm mYM04eo8YuZxOfmLhY5UexWhFc1cPTjuqbgJ3q6cvm3RFt9+dXP7ZCjBwm+HgVD33cQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793588348; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=JwjnGkL2ppzQfw5hphzRjedJSbkXkKpf+YZS3GSTc0o=; b=OQbz1Fn2U87XpX2dk5x9HbTnVwEVEJZ4+k+TtcNKQ/kR72QGIBN/Nbk39p5DG4I8Wfc0 wXiOsh03MIkWs4AiymMBHbDSrvBmHAl02Mb51JNt4tdi2EN3UqQsXzCelfwzI+Jn5QIYW tibu5inIrSNQMpYFePPJ2FZpG5bN/Mqo/+Xh3hVqTKx4VgJSQRS8rHxJPbU2OJZLuah5O ffZTZI3uHgA6WQpuSGVKE95p0nrW4Fur/jhoMjDbidoW6BNVZhXOKEb+5zUQAeMBlDTto nZJvwP2Nm37UpknmGg7mCcVailBuao/CQXlg3MhZU/rAwLeBguxKhyLpHHlJAu9O/VQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=U+dE9JNA; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E0E2606A324 for ; Mon, 2 Nov 2026 02:59:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=U+dE9JNA Received: by smtp.kernel.org (Postfix) with ESMTPSA id AF44D1F0093A; Mon, 2 Nov 2026 02:59:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793588348; bh=JwjnGkL2ppzQfw5hphzRjedJSbkXkKpf+YZS3GSTc0o=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=U+dE9JNAKErW+R6MKYNNX6rmLyZYoEm4JSLyc9FBN/xiD0qeH3k5YZFh8UDWkKTJg i7IWZflrPQX3adLwbWu0J0KcbJVYQlV1Ka9x/NZ5zK4py9TDruvjY6UFU+4ukh4AN7 IhBpF4wW5fKNMrT18Fnyld8AhXSuJbGZFK4yK9zAumD8oNH9iLV/KDZ/3oy+d7Xw5I hBpCnd61PpK92GpHbQRU3U2jObeLO4DfTN1XoA4ilbR8yZUMb8se/RVJ9LQPBehJzU H4h8Ta7bLA8Q/HccYKtkcPR6SAdTlLfOznPmossxLt0NZKsnZ1hvy1Lk8ZbsFN1Kf4 M9x6p1wTVTsjg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang , Zqiang Subject: [PATCH mptcp-next v4 2/5] mptcp: implement peek_len for proto_ops Date: Mon, 2 Nov 2026 10:58:55 +0800 Message-ID: <60417d840527fb839aec6e9a15a3a4a906d59919.1793588257.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.55.0 In-Reply-To: References: X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add mptcp_inq() to compute readable bytes at the MPTCP level using mptcp_data_avail() (bytes_received - bytes_consumed) to avoid TFO overflow issues. Returns 0 during handshake or when avail >=3D INT_MAX. Wire into mptcp_peek_len() and assign .peek_len in both mptcp_stream_ops and mptcp_v6_stream_ops. Also fix mptcp_inq_hint() to return 0 instead of INT_MAX when ack_seq minus the head skb's map_seq overflows. On passive TFO the head skb has map_seq =3D -skb->len while ack_seq is later set to iasn, so the subtraction overflows INT_MAX. Returning 0 prevents SIOCINQ from reporting 2GB and stops mptcp_rcv_space_adjust() from skipping autotuning. Co-developed-by: Zqiang Signed-off-by: Zqiang Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 0caa31525b90..c6d354900e7d 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2409,7 +2409,7 @@ static unsigned int mptcp_inq_hint(const struct sock = *sk) u64 hint_val =3D READ_ONCE(msk->ack_seq) - MPTCP_SKB_CB(skb)->map_seq; =20 if (hint_val >=3D INT_MAX) - return INT_MAX; + return 0; =20 return (unsigned int)hint_val; } @@ -4797,6 +4797,26 @@ static ssize_t mptcp_splice_read(struct socket *sock= , loff_t *ppos, return ret; } =20 +static int mptcp_inq(struct sock *sk) +{ + const struct mptcp_sock *msk =3D mptcp_sk(sk); + u64 avail; + + if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) + return 0; + + avail =3D mptcp_data_avail(msk); + if (avail >=3D INT_MAX) + return 0; + + return (unsigned int)avail; +} + +static int mptcp_peek_len(struct socket *sock) +{ + return mptcp_inq(sock->sk); +} + static const struct proto_ops mptcp_stream_ops =3D { .family =3D PF_INET, .owner =3D THIS_MODULE, @@ -4819,6 +4839,7 @@ static const struct proto_ops mptcp_stream_ops =3D { .set_rcvlowat =3D mptcp_set_rcvlowat, .read_sock =3D mptcp_read_sock, .splice_read =3D mptcp_splice_read, + .peek_len =3D mptcp_peek_len, }; =20 static struct inet_protosw mptcp_protosw =3D { @@ -4931,6 +4952,7 @@ static const struct proto_ops mptcp_v6_stream_ops =3D= { .set_rcvlowat =3D mptcp_set_rcvlowat, .read_sock =3D mptcp_read_sock, .splice_read =3D mptcp_splice_read, + .peek_len =3D mptcp_peek_len, }; =20 static struct proto mptcp_v6_prot; --=20 2.55.0 From nobody Thu Nov 5 07:28:15 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793588350; b=CeLWXp8IWTo4Ch2rxjjjFJd4u+ix/hLvCNrpSrb1DhLCsCnsXD64rNUSMlHbJqbjsYjT YxeNbs+AcSJm6c//FUGDIfWODq4+crJysovEKSgaKQq7RoQtHKZbhPImjK78/MuQ+KCyL Mcpic5fq8/zZtJbnoeRsSKNTKqwSHd5JkB3Inw6/7MJ7Iw/nSmmlTeNFFOMzuFkFyK9Ow SjIUPIIEAgFt16qTvoizc0u+sB4FmDo7YvMxQOLoJ2d3G+ATRq96Vwxr04lAe4OSLOHGa gGezMTOfSrIrqM9rOLHyvYbxky9tdsLQLIjOZJzNFGOD7Ca8mRnkiF7LVcyy99JIqkw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793588350; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=GUNNsDmpVVGsIAqUboL6f4B6qj53zzxfZZxkPsKQpAs=; b=RD0z3Dl4cOWm/GZy5b5i8gxEMqzNij7VMRAl+V0/j4LbrmrzzdJ+7LmKzHM7MocgacU/ DWcwPGw5NR6kga3HMotdG6UeUqB8D0LlXl8d4vgQ33h9gnwsMD5/2vsqmHPQs3BFDduvw hQu7Nq4ZFBdhTLPibaWYbYTtvpJgfqKiCpnE1hDySVkPwuXImJzQ6yJISdg5F8Hb7RiAo hdxSyqsaGJ3YtzbcyCe7HFqYVgPZUYVcd0DJ6FrP62AG6A5Hbk5r8Jv3sVmyH3tVn2OoE BO7AqTuNss9SzPKSNabOUysQQhZmJ0EYdub+Cy2oTgPjlIaIEJcQZkHuLGiKnVGRH/A== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Fhdprqcy; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EADB1606A32C for ; Mon, 2 Nov 2026 02:59:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Fhdprqcy Received: by smtp.kernel.org (Postfix) with ESMTPSA id A027E1F00A15; Mon, 2 Nov 2026 02:59:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793588349; bh=GUNNsDmpVVGsIAqUboL6f4B6qj53zzxfZZxkPsKQpAs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=FhdprqcyK5doqDWzkwsLkiYHjQ0BPlb6g4MFA4n/sGakBMw7nkJkE2wAdpHdUBIEJ 37mnKp2fIYl4AiVEi9DBtw7s3n41ZMls4iAuLUcKfnCyfS3RgHg1R7m4Ua90g/NUEW r6K44HeFfY62E8yLyAgRldC6//IeAc5IMBjb+w+eoA8DB8d7aPlxd6sZ1fbj3vj5BR SyQW+E4pfUeQC2iZ9Kypl/lSWIezMfGiNUGOf4Z1WdWqt7/QifWpvhdpXeQ9XULJY5 eKtKAB30+m+AryXQ8mPI28HgjvEg9R2cmGOr0Fw/9DS/FZvRxWp+a50Fx55KSWKaPM gYv2ranCOonYQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 3/5] mptcp: add sendmsg_locked to proto_ops Date: Mon, 2 Nov 2026 10:58:56 +0800 Message-ID: <82703a59b6e23ff521082b1cfaa36b1ffb1e36a1.1793588257.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.55.0 In-Reply-To: References: X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang MPTCP currently provides a standard sendmsg() implementation which acquires and releases the socket lock internally. However, certain upper layers need to call the sendmsg method while the socket lock is already held. Split the existing mptcp_sendmsg() into mptcp_sendmsg_locked() which assumes the caller holds the socket lock, and a tiny wrapper mptcp_sendmsg() that acquires the lock and calls the locked version. Add msk_owned_by_me() assertion to enforce the locking requirement. Expose .sendmsg_locked in both mptcp_stream_ops and mptcp_v6_stream_ops. This prepares for upcoming kTLS and sockmap support. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index c6d354900e7d..7ccb1c7506a3 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2038,7 +2038,7 @@ static void mptcp_rps_record_subflows(const struct mp= tcp_sock *msk) } } =20 -static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) +static int mptcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_= t len) { struct mptcp_sock *msk =3D mptcp_sk(sk); struct page_frag *pfrag; @@ -2046,12 +2046,12 @@ static int mptcp_sendmsg(struct sock *sk, struct ms= ghdr *msg, size_t len) int ret =3D 0; long timeo; =20 + msk_owned_by_me(msk); + /* silently ignore everything else */ msg->msg_flags &=3D MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL | MSG_FASTOPEN | MSG_EOR; =20 - lock_sock(sk); - mptcp_rps_record_subflows(msk); =20 if (unlikely(inet_test_bit(DEFER_CONNECT, sk) || @@ -2167,7 +2167,6 @@ static int mptcp_sendmsg(struct sock *sk, struct msgh= dr *msg, size_t len) } =20 out: - release_sock(sk); return copied; =20 do_error: @@ -2180,6 +2179,17 @@ static int mptcp_sendmsg(struct sock *sk, struct msg= hdr *msg, size_t len) goto out; } =20 +static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) +{ + int ret; + + lock_sock(sk); + ret =3D mptcp_sendmsg_locked(sk, msg, len); + release_sock(sk); + + return ret; +} + 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) @@ -4840,6 +4850,7 @@ static const struct proto_ops mptcp_stream_ops =3D { .read_sock =3D mptcp_read_sock, .splice_read =3D mptcp_splice_read, .peek_len =3D mptcp_peek_len, + .sendmsg_locked =3D mptcp_sendmsg_locked, }; =20 static struct inet_protosw mptcp_protosw =3D { @@ -4953,6 +4964,7 @@ static const struct proto_ops mptcp_v6_stream_ops =3D= { .read_sock =3D mptcp_read_sock, .splice_read =3D mptcp_splice_read, .peek_len =3D mptcp_peek_len, + .sendmsg_locked =3D mptcp_sendmsg_locked, }; =20 static struct proto mptcp_v6_prot; --=20 2.55.0 From nobody Thu Nov 5 07:28:15 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793588351; b=qVzk6VdnjRUpnwYmsaOie+BD99NHDfrHnngLI++cjdhdC5oY57OawvBQKVt+SATaTGzF WJM9Fjc6t3U4na+npyYLyCnpqBWkPrp1f1c947yKj1sbqmVHphpo+ecOnSm6C1HVjFDhZ Kayozzo3yBgZTEjsqr/42tIdnwvUZb4i0XWJuLpVARyHNPMVgnj6L7CGFbAsTInlqaucs yrpdRei1T6/dvF8F3av1TcFhhVWEGty/fjaMZijD3b5TD3b58FwcZMgcHLO/UPE4NprbD 2LCC7svbrHv/2+OlPj4Vslgbtg9KwV1Ktyc34tCzxkCUXC+OGENVqKhtsisrz+p37/Q== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793588351; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=PNr91aVcCG8ECkTntB3/im7JjMBScbotU7eKr9YeC8I=; b=qWzzjVqRE4RvnYQgRI5qRZs29tjaQKwxR5HzhixQ+f7zbB1+Vgj+ffb0W5MblYNga5xe 7p7QwVkEbhDKki4ek088KPWJo8PhZEoLCEB/9pfZEYCYsZUJPla50MqSCUMGqvzLsMc15 Ysux+gcQ65SmD17/ESgsrQK1q0jX+fuYkp2Vo86jMw6lHZQRJ/55SNl4TLER9WFor7Uzq PnHavwOFYC9MV+hwQIqqgLf8JDp7KmXr2uATXcXYjopmg4qMw5nvUT/hXXuDB0sBY+JAx CsZL3q5ki+KI0lJsokerByrllZhNnny5uyF6QfnOxtlyFMQTshQ9sxrzbs8b5ZL4I3g== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=OTI2Gx5w; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0563A606A32E for ; Mon, 2 Nov 2026 02:59:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=OTI2Gx5w Received: by smtp.kernel.org (Postfix) with ESMTPSA id 162661F0093A; Mon, 2 Nov 2026 02:59:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793588350; bh=PNr91aVcCG8ECkTntB3/im7JjMBScbotU7eKr9YeC8I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OTI2Gx5wo4ZoQOws2Z0x3bHRyvVFrw+9vJuVL/W/hiIUMVL2S61iqyhoSiZSR5erf pGnQCE8aHqkekTYzdG/4u+YTfnRMaHuV69UGbTFqJkCrS/ka1PuxCKBXFyJDlcQpQe JUiubiQ9+lDfPungWFRcvzjDjw5hY2dxv5ar8h7piLBpE504CdoY7AOxveLbLIC9zW OTEcFICrDbGhD0qpWAOkwaN4nkK+ObqJ3qMCk2ANps01uK2T2FkkwUX+PzgPCiFyQz cQljph+JWrT/h7HEpdzvdU9neeUdAkEkyN5RoQvcLzVN104hzv5G7b0WsMip7yR0GB 1ulx41c2pKcyQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 4/5] mptcp: track app-limited state in mptcp_sendmsg Date: Mon, 2 Nov 2026 10:58:57 +0800 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add mptcp_rate_check_app_limited() that walks every subflow and runs tcp_rate_check_app_limited() under each subflow's socket lock. The helper bails out early when MPTCP still has data to send: unsent data (write_seq !=3D snd_nxt), skbs on the send queue (mptcp_send_head), or data awaiting retransmission (mptcp_rtx_head). In these cases marking subflows app-limited would mislead congestion controllers. Invoke from mptcp_sendmsg_locked() after send-side setup so BBR and similar controllers can ignore rate samples taken while the connection is genuinely application-limited. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 7ccb1c7506a3..ab7de11a448c 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2038,6 +2038,25 @@ static void mptcp_rps_record_subflows(const struct m= ptcp_sock *msk) } } =20 +static void mptcp_rate_check_app_limited(struct sock *sk) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + struct mptcp_subflow_context *subflow; + + if (msk->write_seq !=3D msk->snd_nxt || + mptcp_send_head(sk) || mptcp_rtx_head(sk)) + return; + + mptcp_for_each_subflow(msk, subflow) { + struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); + bool slow; + + slow =3D lock_sock_fast_nested(ssk); + tcp_rate_check_app_limited(ssk); + unlock_sock_fast(ssk, slow); + } +} + static int mptcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_= t len) { struct mptcp_sock *msk =3D mptcp_sk(sk); @@ -2068,6 +2087,9 @@ static int mptcp_sendmsg_locked(struct sock *sk, stru= ct msghdr *msg, size_t len) =20 timeo =3D sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); =20 + /* is sending application-limited? */ + mptcp_rate_check_app_limited(sk); + if ((1 << sk->sk_state) & ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)) { ret =3D sk_stream_wait_connect(sk, &timeo); if (ret) --=20 2.55.0 From nobody Thu Nov 5 07:28:15 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793588353; b=QERxZfNDn/gS/wPX6FGZ/dg5Jp8Ik9kTUFgZ6oJeVEDmh05wjkIQhGiSsfkrzDQmRUxJ KtVIekhi+sLNiRr1VIIqgURYBM1JOqBDwxBt++UNdaVcW7OsmIU7BvUPkVD3ePMr9nwO7 bdx+HzQUrIq6Mhqy/tCTv92aP9Uv/Oh/jKumyadjoKQsNYYSE38HkRPpndGUi86+4vcmW ZSvhT3BSJ5kZ+iC+gAXD8mg/Ze8TbyoJn9yaCROUGzWc6sE7LDUkpQRL6or/fdSRM7Ngp qNv7E/m6idjHyOL9yb3iTC62MWzhmwKbwKSfmkmNpOOONOpeAPZyodme7EYCwKam24Q== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793588353; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=7+j85nzl2zC+6eFpOE4tO71tHI7dTH1G+8o1HEDJfMA=; b=Hq8DR20mkIZ2K842aEhFHS/vWNdAtBtoCWT87bs1Qj+QV+0MI7OOPcUcCQPJg/ib8WiL w23VjFbEe7v7eW1xwfuyDhfKtT/9I/ARazs+TazhPqFGtG8N57TInSQhtYTAB+f0JYtIF 7a7CqVzB+7vGa/YjCxqT4U3fcwPDdMkcwTQPAhqUUmBHXRf/2g2kSok1bK8Fgjc4LsT4f 2dK1kVbrqQGR1XJgB/RSndyhm1HYZObL+pzp8ddcSWNS6mlJ1JTb1cImZxVzL8n6k+VSf fzxl8fwSzkhWRI82ONr5O/20+3wGDE+TTkUaGwL226yTIKLPHr7x42BY1IZuxpRwUZA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=PHLBM0VS; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A89B0606A327 for ; Mon, 2 Nov 2026 02:59:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=PHLBM0VS Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67CB11F000C1; Mon, 2 Nov 2026 02:59:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793588352; bh=7+j85nzl2zC+6eFpOE4tO71tHI7dTH1G+8o1HEDJfMA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=PHLBM0VSzJ0KSleUonqf/yA+j/3cdrLPSULEuaSqwC7pMY2intCJqLyXaKqX0kIRi WH+Ai0+rbFrHaIgHT6VrXOckn1ASnS8/0Xz+SHX6vggG19WDlpXDt0yblUKFqkxccC 7042RZEj1ts1IQgmx7OkpMyXrC+wI3TZa/SaIghv7SU+LViVSBnGzR5RRvlMC6Mc/j bxNZlSstQHj1Fxcr7dk1VbLVenY2p+cnD96T0hjhZtLTzeDBKMNvHXTI2BWR6DVtmr ks2ZAFOOYi+1EDjhjxJhzl8+1nroL+dClJyyw7FDyRWo3vFE/u1ViO5yYkLQRyofqe GcPkGALKNvqBg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 5/5] selftests: mptcp: sockopt: check app_limited Date: Mon, 2 Nov 2026 10:58:58 +0800 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang After a small data exchange, assert tcpi_delivery_rate_app_limited =3D=3D 1. rate_app_limited starts at 1 (tcp_init_sock) and is cleared only by non-app-limited rate samples. The preceding commit makes mptcp_rate_check_app_limited() set tp->app_limited on subflows when MPTCP has no pending data, marking outgoing skbs as app-limited so rate samples don't clear rate_app_limited. This guards against regressions in subflow app-limited accounting. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_sockopt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index b8158a1198eb..9517c530ba21 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -635,6 +635,11 @@ static void connect_one_server(int fd, int pipefd) do_getsockopts(&s, fd, total, total); =20 assert(s.mptcpi_rcv_delta =3D=3D (uint64_t)total); + + /* app-limited accounting only checked under EXPECT_ALL_FEATURES */ + if (expect_all_features()) + assert(s.tcp_info.tcpi_delivery_rate_app_limited =3D=3D 1); + close(fd); } =20 --=20 2.55.0