From nobody Thu Nov 5 07:56:43 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=1793860695; b=0UkO2xEsTqFPF+jz8hDiuq75s0C3mK6VebDd1JG/yqKj9teKsTdBv5GdA8MNjTOCCLgZ y0Tx8/w90rPd8ShIPhuN0o/iHt+MS6JUMqcyi9nQhQ7GE8H0FGDclrCz7qK3BlFu0eBM8 bxcP/IoYleIrR+yGZWAbz+OOvCw2deBv6IJwtBiWsgFOOW6qz1k8mIEipqa3U269AcDRs fQ82Kly6xvKvJpfW22o6jKdN/KR4+oDiOJVDkhY7TYd7xYvyQ+h4/CKBC28A7JMYbRr2S u3dnpGNNlJEHXL/bpnwAhp+ugqzkASHN5uTYvdbhxEnphl+hKLURkOXd41qmu1TkO3A== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860695; 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=OZzCeEkQdtypgVB5sk8QypUgehUCVv+PCyXOWb8e14tymQ2vgurDaQ7gEHk8OcrJcE/Y 72oZpEwpbFtZ6gV0IeZz46109ZdsD9g1141Wecvt9P734yvVxiBv7OBD24Gh6WQWq0WzY Nin+jXJmw2mAYCS9h5HhLs+mxMvg/bh/qYwwuAVopkihm2+wu2frfRLELm1vRDPpjkTyr /hsbA4l5RuROQe87Jgnxvo2vvYza1wqCphKVZesFyfZejz9cix6JtEXxCMtDV7fG55FXg zRYpy39i7FVkushj6p919TTPkOUh+Hz7YnvXceRiHda8GqpWidcogAPV6KLehg7X0+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=N+dcnhZb; 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 5A7F1606A31B for ; Thu, 5 Nov 2026 06:38:15 +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=N+dcnhZb Received: by smtp.kernel.org (Postfix) with ESMTPSA id 018A81F00919; Thu, 5 Nov 2026 06:38:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860695; bh=FcyZ/23EO9wCaimpG8uixyj/1tWZ+pqjTJz3x+0Dc/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=N+dcnhZbXv9+SSZIzJfYN2fjbqhC0AgpW9kEheek6VoLryiZzA4YL7eDNmp4awF/Y 7tu5Rmi2w1E+b0SpMhh1XirCidtN7+Qkwc58Hr/zXfMvLkNkqKT1SEjJMqukeCHflA Db18/6h1G4YCEz82YtGzrvZqkpHkzFNTqAwG9/7h36F44sBdwUMRio6ZgcsVeOLAGz WEmib49VmKKu3/DDOhNWSad+vENVI8kdY8Gybj5SmzinWUmNVThTrnqcQOF26RhobR QE4/Lp7FxJ9huJns1MK8yzlb6TbYagsqfaBK+0BVhI+fmaFgwS+HtMnhv8DQCinLB6 ogkWRT6mBf8UQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Gang Yan , Geliang Tang Subject: [PATCH mptcp-next v6 1/7] mptcp: update mptcp_check_readable Date: Thu, 5 Nov 2026 14:37:57 +0800 Message-ID: <39dbcb8350a0dc436687a4b27af6ba1007d11710.1793860134.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:56:43 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=1793860697; b=45MfEpCj+bcEvclVRsINFBRtBbohuakgOaywKd1+7pHZ/xKN5xamUCEaQGnM4p95sBi9 rAKwqsJIoJal2wSzYiz3JO//4lUrhVpbDipeW6ZquUN54f6rVKFT0PjkMIM8uH6q2/vST MSN4DcnEH5xSOX0qMDSqhru/aSOwJBZnVFdK3iqd8HzOd5kni0XtWW3Hx4TAXHGE1yNu4 7dG99drA4VV89z9mjBq6QbA7yq9A6QaIExvMhwAs68etnMXk5z9H6wQlSNbPzpPFp5zA+ /1pUhwc72+DL5Wch5K3tJykIvebPbExYtpnX1EDdZFnOnL9RZzAZcmISG53KJ3AcBvw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860697; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=BT2H3AwvlOxV/NjMDugv3TJakxSEpI35PB+owd5wmnY=; b=YRtdxTzFe4vF6qNlrh85EFn444kIMCiqusPC1yjqijMcY1v2ZekN7sGlnhbet4n8SkCI C0PwWHg1EaoxBPIbgcXzYdqrNWxJSEeXjXnbabWsfXptlHiYIfcYnAnqGGPZbGdxjpbYJ 87Gz6RhQEWrpI1jXEvPbg33slsfqz3hWxeD72yIgxiY3TKHJCW0IKnsPV3I4k7AuPQDNt q2V8ywEVD/XyH+2m9OHECc9/SnVL8o6BzjW4Tld5g7sZnZkc0AkPXB0BuIq50mH//MhZ0 VYUqrD6mI+gu5cIU81wslLQOQ2sHYhzwzEHyAXfVSFdxDSu2RMEaV+oZBrmldW5lFdw== 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=heDCvH3r; 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 B3F38606A31B for ; Thu, 5 Nov 2026 06:38:16 +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=heDCvH3r Received: by smtp.kernel.org (Postfix) with ESMTPSA id 83E891F000C1; Thu, 5 Nov 2026 06:38:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860696; bh=BT2H3AwvlOxV/NjMDugv3TJakxSEpI35PB+owd5wmnY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=heDCvH3r1vTyHfdKcPa4E361R0VghWtcDkjOYpxskqQHNQt9zWtGvvPCtzYSCFQWK m1YFg/xxnfHfsZkRncjPliclS7M5Na2sZwz6eUK1F1A1wQhmfusVsV/QYMC/SSmKEU DpZSBT0apGm9xX9mi2GB03iv37CC8GeCG1/8dbIuDuJ1SQs59beV2Y94Edodkd9Dq7 SDMCadYkd1zEcNAy8pAuvrhY8VrLxDaV3C3bA2WADTNzPm9CCsHviho42GqKNKGOE9 cdNqTZ2dbAXqn6BZHhDyx10Qd9ry3GIV8pxECfeZGP4WUFqSvspZxNG9DmUe3lrlnd Srh52IOvAS9WQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-net v6 2/7] mptcp: fix TFO SIOCINQ overflow in mptcp_inq_hint Date: Thu, 5 Nov 2026 14:37: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 Fix mptcp_inq_hint() to compute available bytes using mptcp_data_avail() (bytes_received - bytes_consumed) instead of ack_seq minus the head skb's map_seq. On passive TFO connections, the TFO skb has map_seq set to -skb->len (representing data before IASN). When the third ACK arrives, subflow_set_remote_key() sets msk->ack_seq to subflow->iasn. Before commit f03afb3aeb9d ("mptcp: drop __mptcp_fastopen_gen_msk_ackseq()"), that function adjusted the TFO skb's map_seq. Since then, mptcp_inq_hint() computes ack_seq - map_seq =3D iasn + len, which is almost always >=3D INT_= MAX, causing the function to return INT_MAX. As a result, SIOCINQ/FIONREAD through mptcp_ioctl() and the TCP_CM_INQ cmsg in mptcp_recvmsg() report INT_MAX instead of the actual byte count, and mptcp_rcv_space_adjust() subtracts INT_MAX from copied. This lasts until the TFO skb is fully consumed. Using mptcp_data_avail() avoids this regression by tracking bytes directly without depending on map_seq. The EOF hint behavior (returning 1 when socket is closed with no data) is preserved. Fixes: f03afb3aeb9d ("mptcp: drop __mptcp_fastopen_gen_msk_ackseq()") Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 0caa31525b90..1704e689bc93 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2402,22 +2402,16 @@ static bool mptcp_move_skbs(struct sock *sk) static unsigned int mptcp_inq_hint(const struct sock *sk) { const struct mptcp_sock *msk =3D mptcp_sk(sk); - const struct sk_buff *skb; + u64 hint_val =3D mptcp_data_avail(msk); =20 - skb =3D skb_peek(&sk->sk_receive_queue); - if (skb) { - u64 hint_val =3D READ_ONCE(msk->ack_seq) - MPTCP_SKB_CB(skb)->map_seq; + if (hint_val >=3D INT_MAX) + return INT_MAX; =20 - if (hint_val >=3D INT_MAX) - return INT_MAX; - - return (unsigned int)hint_val; - } - - if (sk->sk_state =3D=3D TCP_CLOSE || (sk->sk_shutdown & RCV_SHUTDOWN)) + if (!hint_val && + (sk->sk_state =3D=3D TCP_CLOSE || (sk->sk_shutdown & RCV_SHUTDOWN))) return 1; =20 - return 0; + return (unsigned int)hint_val; } =20 static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, --=20 2.55.0 From nobody Thu Nov 5 07:56:43 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=1793860698; b=fsyJOJuGlTwsXfj1S4Nfb9MrlomOw43udmTZVqbofjqpNJSPJhj4FqwM5Pp6UBpA+sCu fBeF/k7GKeAdgCQdjhRNDuknHes5mWd4ODfVOF64+TPv/NnN0uoK05xRJEf16J3tCBsfl oBU+N3rjPDYhxDGIYfi+9X/KPe0Kx79MCqACjzs9o8lGBkwgNv8lVqU1faRc+mPcNdb2b r58DsN8OQ630w3r7jZwqk9J6GVatmHLt90TEX9e/82UIAJdoFsQ+ng4lUlEhKGrd1kgAF KGMGvwNwsCJZqEiWWzWv/SJTmKOZI5ORzj2mKLCjVT94frF3espr035Lf/0Sf3bEJ8w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860698; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=zt7KY3YNKjXf9NBz0qvweS5Ip7lax0wWTxqRXwoEY4E=; b=tqW/I8bhkbJ+OCAWd4A3T2mQ7cxXIJqQV7ObY/A1QZaBvr6in8ufIUzcLt6da/JOtUsa PK1c6/F+zvW7neo/mWvNFc5dG4ormhM0DJb+IrmL9mi8WAitm4BRRVcHpafiAoWhIIWCJ KwhQnk9hD8/a8Ga38Sl3z8ruMFyIbbcLKuvJ6Hvrr5wtBgfr4TBn0o9C2wn65g5GE8Axd bjcvMqKaA2zgCgatxXsqs8Ui9QdOoHrg6IkS2oNKfVYGrq2JN1vK/8V1t3kSVrqPpe8Fd HWmGFNXX30qfFt+OepNYpISo6021Nx2dAzRw5gbjIsbalDOl+K+LOp5icrv8qLP88ww== 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=DUlCPQQX; 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 22932606A31B for ; Thu, 5 Nov 2026 06:38:17 +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=DUlCPQQX Received: by smtp.kernel.org (Postfix) with ESMTPSA id D52A21F00A16; Thu, 5 Nov 2026 06:38:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860697; bh=zt7KY3YNKjXf9NBz0qvweS5Ip7lax0wWTxqRXwoEY4E=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DUlCPQQXdkrMf91R4gpqTwnQpzY9Qs/GxlyifK2KN/zF+EHKrfm6ylsf6ZHuWdIRn juWghLV/gzv+wTMakG+YImFi+voQlUNod0gUQI+lMBtWg6ABebsp5VhdMVTGXuyPxo sUT9cydTEHTP0Fu/HUUl5L4ZDR7WdlXBDQyNG3+l1joaezEEYqK0+nbvb9gs6g+CRQ Ek43+N9RQSKPuQz1aVg2Iqqa4HhIa65vJCPOV3BNTk9nLJqPbKUvwpfPbMr2ZWfttJ bJGWQk1tBCsjQTd3fQTFXJDWislpuaN6XzPpTwqZfTfA+LndKRSwqxJtdB5viciOSJ 99mLVpsTIgOAw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v6 3/7] selftests: mptcp: connect: check TFO SIOCINQ overflow Date: Thu, 5 Nov 2026 14:37:59 +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 a check in mptcp_connect's server mode to detect TFO SIOCINQ overflow. When a TFO connection is accepted, poll for data to arrive, then check if SIOCINQ returns INT_MAX. This detects the regression where mptcp_inq_hint() incorrectly returns INT_MAX for passive TFO connections. The check runs when the MPTFO sockopt is set. It polls the accepted socket for up to one second, then uses ioctl(SIOCINQ) to verify the available byte count. If SIOCINQ returns INT_MAX, the test fails. This test verifies the fix in the preceding commit "mptcp: fix TFO SIOCINQ overflow in mptcp_inq_hint". Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_connect.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/test= ing/selftests/net/mptcp/mptcp_connect.c index 178d98d91fea..83db495704fe 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c @@ -1207,6 +1207,17 @@ int main_loop_s(int listensock) check_sockaddr(pf, &ss, salen); check_getpeername(remotesock, &ss, salen); =20 + if (cfg_sockopt_types.mptfo) { + int avail; + + if (ioctl(remotesock, SIOCINQ, &avail) =3D=3D 0 && + avail =3D=3D INT_MAX) { + fprintf(stderr, "TFO SIOCINQ overflow\n"); + close(remotesock); + return 1; + } + } + if (cfg_input) { fd =3D open(cfg_input, O_RDONLY); if (fd < 0) --=20 2.55.0 From nobody Thu Nov 5 07:56:43 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=1793860699; b=XzpGmWLv4dUviI2rZTclGd7iV5QZ/OMA+jMDu9GNSbOONwAAOoygCJSs/uCEHALX1z7S 1pi2d7hfKKiFrPYjQ6Ne1t5MNqXMsRCO5W0JH/KFGpjkS83KJ2u8+yDHDRs27Zjc7hvZ7 TZgZ9Jt5B9H+om/O+k9pDRdkVfNkg5m/w3o33jBDJ0JqVbX7czIRk1p8EhDOFwVgcBYna lpKqFOZsfoYd4acXDrpgE7GUepUZiTACaZvwEapg34bbzQG2mRLGbu2ynLxCPiL4DEjMx 1d/ELJ4js+Or6wEQbiPahl95yVKX3CIbJFWUUGUijWuFM6EZWnt340e/81wDEk/nkTw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860699; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=1BOj9IwBetuH6wQfgMlaFk13qYefPRDVrU8bFhlZjog=; b=PBpkD9KHe+bQXCcnkv/Axt7wsIESRL1QNcrzXD0Sye5zfDPycnTv9ITlok8yaLul0l8Z YvjdkeeAGDrba31jwtvc+kgHOfBC+YTdXqz+Pfiway2vlNwOJITk/tl3UCPRngEsFM96E ucCFlHuZ4iiJ3deID66yFSjHuBDe8aZJPaoO1sUDlWMGsQafYslvK1No7DH3W/TBC7nI6 cgMvWJ1VPUO6aMbynbRa4amIpc5xI+OYbXgQIA7jlF2Q3mtvSj0OHfvpZq4CUbm/bXuqP aDQE1qABI3CBtKqF9JlGH/mzDOlbUaMcXaijMRP3g+U2EB1ZpYzpt+sBGoMkcm4Pn6g== 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=Sg19iG18; 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 3D79F606A31B for ; Thu, 5 Nov 2026 06:38:19 +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=Sg19iG18 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3179A1F00919; Thu, 5 Nov 2026 06:38:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860699; bh=1BOj9IwBetuH6wQfgMlaFk13qYefPRDVrU8bFhlZjog=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Sg19iG18C1Cp9wkoWJHk0FGXEFoVA8YjXfoTnXOp2M1WNXmRMAmFRyzcpCPtkWq+d aw3ZkYASaVwlzf7zAo1llCDDT3NOs5nvCpDSe3SXraFtCBzZ3klrNVOp4V3ouF4ZbN yfczdm+DLZG6H6H+AVXSQ4Y0bBGBJrzaTwQrxMFrj/3N6S/T1MkKUbrOwxFZGiuC7P 0sIka7G5s8NFW+mKGd5DJUZOOs7uQOT7e2vJa2D7CxWEhPY6am3EaMHlQXtnAMuvof hC+JUeMc1fOOXiBGLI9oZt7KxoJosYwg5XXEVre5qYpx1nfgQp/+Eh0ewJdPmY/hzW y/MGFYaItKUyg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang , Zqiang Subject: [PATCH mptcp-next v6 4/7] mptcp: implement peek_len for proto_ops Date: Thu, 5 Nov 2026 14:38:00 +0800 Message-ID: <0033cad94cccd9808f0f7eae563bf6d27f414205.1793860134.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). This aligns with TCP's design where tcp_inq() is used by peek_len and tcp_inq_hint() is used by SIOCINQ. Like tcp_inq(), mptcp_inq() returns 0 during handshake (TCPF_SYN_SENT/ TCPF_SYN_RECV), INT_MAX when avail >=3D INT_MAX, otherwise the actual byte count. Unlike mptcp_inq_hint() (which mirrors tcp_inq_hint()), this helper does not include the EOF hint (returning 1 when socket is closed with no data) because peek_len is used by upper layers like strp that only need the data length, not connection state information. It also does not drain the backlog before reading counters, as peek_len provides a heuristic value for rate limiting rather than an exact count for userspace queries. Wire into mptcp_peek_len() and assign .peek_len in both mptcp_stream_ops and mptcp_v6_stream_ops. This prepares for upcoming kTLS and sockmap support. Co-developed-by: Zqiang Signed-off-by: Zqiang 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 1704e689bc93..aed25c901e4b 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -4791,6 +4791,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 INT_MAX; + + 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, @@ -4813,6 +4833,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 { @@ -4925,6 +4946,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:56:43 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=1793860701; b=sMijyoNN2TQKwHtSHyxOkRPU1YbBSaPnTvyMayYRJvsRw157rZGRpzDjqlrZaeVYWNHQ eSsGMCaGRTvMli9UVyTvoQtuQ13vyeB1BVE40Ai8vULOf+t6MkTtDn8kVLVMj6qlHdjru KtrNwbJva3C5GPUBWgpKHkE6roTOVMZ6wD2eEvHHiSF4aOutq3F6VGOty/L4VjBnrhtB7 ASTXZCBZnwEWM/d0KuIZc/sGId6nu83viY8OktfOtXUectjHHHO9FZFL1TsiMeEXW+2C/ 5/VGzBoxeeN15g7D4hIrWKU/iwZ9TgWvMF7ZoDs4XVsshWsxkNUoiCYZ409yfMvUmWA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860701; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=MORb8QvwzgTd1/sWVrspuwjFiYUddUFGamRCAieLgPs=; b=ZM2keP25P5H0GnBFYMfceGKWJ9l29SD/8Q98vg0TxbA2ioS3UYviST9Ajw8uGVnzzB/J rOEQ7FaNJ2OpjSLgTSHQaRwYX/NLbpfAbKd/h71i7XW/1tUrtVCEr/qP/LbP9h91RcK51 LXN0e618OXn412q3kyYzlDN6HJBBDD2xvobrDKjBLm5a/opGxFKDyEraxj5TNbyUEKT+c z5RPHUJsMErmnz9uOoqZhty8POcmiFExs+55N8w5eE3H+R2gxSPpX7mz83naB68IW3r/I y6lImGR09hgOqj4MzJKofTZAjg8paF2PZ7H2Qk9PCqIxzSQrKXHcuKquP1LeHj3aJUQ== 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=A2hVYKou; 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 B9A7B606A328 for ; Thu, 5 Nov 2026 06:38:20 +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=A2hVYKou Received: by smtp.kernel.org (Postfix) with ESMTPSA id 88BD01F00A16; Thu, 5 Nov 2026 06:38:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860700; bh=MORb8QvwzgTd1/sWVrspuwjFiYUddUFGamRCAieLgPs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A2hVYKoujOUI9yIvi/vS2Xi0+6Bf1ss1F3ISsP3r6KoY1NQ7i3Q9XNST97y9vDXC9 oeKmQp5OMp6xpBeWfb5MkiEISc2doCH0I4TlCrwfe9tGYTSIPkQVZaJ0953PVOrA1P U3NejcWU8RQPlG+DVPQmntDS87aPJ6dpVow/QrRA8h9HvWm10aIj0HeZz+KF04KWLT GbnlCJfgRxckCztndOhaXnhCHnJpknORpYJSryrHe+RuCTTM9I4JYNGGrnmTLvD0Br om/QnajJQFD6VEbuXei+bmZM3U2Ps6Yi1wHIJg7ZO2e9vAifjxKRwY4y5LeeP9r8YR RjIWvIVQ9rRzw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v6 5/7] mptcp: add sendmsg_locked to proto_ops Date: Thu, 5 Nov 2026 14:38:01 +0800 Message-ID: <591f2c2e1046f4a0537734a6c0db4d360a876010.1793860134.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 aed25c901e4b..b9c7b0bb6f74 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) @@ -4834,6 +4844,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 { @@ -4947,6 +4958,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:56:43 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=1793860702; b=J297RyyWHJFth3GPxVdF8R8F0lq8lm1NCkrVAAezZKr930gIGX+dJ3J6STH1hzYd+tJr +NPwPZsQHxgy/OTSfPoqqza++YML54ak+C8DCD2/12TvaBjFE+WJfNt6LO3PkLtAWcMda LnTJ2dh80g8fs8ECPABGYFL+bhVCi0kaf/J8B8di8eeGcYpFMiN7V6sdlJtc9Z2EKJx1o poYkpIKCTBClFDUKJ+mULQzrMHelPk2FDjGPWcMHxsElRsfuc/qngi3XRRSXn3Jyo0pIA HTzN/GpDEagOz//dGCRiA+PVkr/embsGkxMzogl7P2+rrTpNmlQAfGIwce6Yr/D9LaQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860702; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; bh=XgzNDp9TlZMmK+wBDH8jW/A4dbs2bnj8fP/nlOwZo4I=; b=sg6ds++4BXtCHlB/egS+N8Dx6ZCjKu7wq3DrpE7wLyW0phH02caF0qUjlcPlLKLyMprz NuilVOycVBe5MNNt9w8RN7GyFtvOSrgKgESP+gqTNS/3J6g8b1Ywh8yXcgDdJujtWrkcj c5xV4atOAkalIjKEhE2qV//ykWycO2rdJndySpAM0cSz6bktvb0rttlIQBp5dM5bjc3cG iRow29hcv6Uprya/zkkpkm0ugfy4g6e3j4T9PkSIL0ntpYJxCOGHB7+XlvIxWW02Uep/Y Gby6XElVnIEKcA4hKOqsfdWW/UELDcK4gucX6tbxr2T++5IOhFXKpaZZb66fO07rQDw== 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=TgEfWJnO; 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 041E5606A31B for ; Thu, 5 Nov 2026 06:38:21 +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=TgEfWJnO Received: by smtp.kernel.org (Postfix) with ESMTPSA id D355E1F00919; Thu, 5 Nov 2026 06:38:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860701; bh=XgzNDp9TlZMmK+wBDH8jW/A4dbs2bnj8fP/nlOwZo4I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=TgEfWJnOaknrKl4ALvTTvvOSQQ5NZLRkx+6UFXuZZjRX5H2tWn1d2MH++ZlI6oovg pfXUWoOO+9Ro/uca5L41EQdfUWlED7HwvGW9s/eIQe0kYCA+orUY4Nn8xoe9CTNReQ /WIn1LZRUcFX6zBn6rrw7cTymUrmcTAC9+v1MP9JkaRxvcFrIwQhwC/k0Ty7ZioBsm +2HB3CoGEmIv4YIgHNL1ePcr7pu6sqMfSpoeYFynSyuUoDMbIqwku90WYzsyiPAt1t ZgefCADdFj/VcJ6MlmJvO5/un8EycWbSzFdCGsonWc7bVjhp34/vxensF+Ms8laZQ0 iG9Tutl08oLcA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v6 6/7] mptcp: track app-limited state in mptcp_sendmsg Date: Thu, 5 Nov 2026 14:38:02 +0800 Message-ID: <1f1319763b4e12e1a3d89f6fe05d17591a86a3ef.1793860134.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_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), pending dfrags (mptcp_send_head), or pending retransmission (MPTCP_WORK_RTX or MPTCP_RETRANSMIT flags). 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 | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index b9c7b0bb6f74..889f244d9da0 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2038,6 +2038,30 @@ 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; + unsigned long flags, cb_flags; + + flags =3D READ_ONCE(msk->flags); + cb_flags =3D READ_ONCE(msk->cb_flags); + + if (msk->write_seq !=3D msk->snd_nxt || mptcp_send_head(sk) || + test_bit(MPTCP_WORK_RTX, &flags) || + test_bit(MPTCP_RETRANSMIT, &cb_flags)) + 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 +2092,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:56:43 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=1793860703; b=i/wApzoTRAn6ex1VyciIkFShzAO6D817vLaL7sChT9pxy57aYzWofYnM4LFP/MqztukS eQWVvuvdRt+Xi7dKz8ohnzQyRJNBG8npjHdehnNOGpTbFTNPDSdSLRnChN6XYHVN/cnsc qrWod4QnRPtIEEwJd2pX6NyTE3Mp9ZdskZazUo7JxlIMgBGnQXT9l/LonjUBW4okuSzPl 6vzbnBBSLHhDUfukm0N4BSls87XXnPaZzjdON5QTElB0+rLcJs2jdgcVe4E9v+rgva9Ca PkEOySGBjWAqQobm0nKX4bG7q0Qt9TlIIwNToTbUzHpfiwgwHtLm/AzjXiqotAjxzrw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793860703; 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=o3oLnfjbvKZZHXbRrCzxw3ejxlrUj8Zz0AIJJJ70N3phKP0VLckn8v7TaRxIhkXRHgkO JCKgBRN9nyutOjSV1hQuZKYdtLyDbjCp34aUyeGITEyt9C/uSkxh2/MnoJHLQ2TlzNyTX zkn5QJaWu5OM6DUZ8/QVlm3gXf3MSS/M95v9cZT3+6ZOCbEhoxm8HCcx0yXhvdBCO6XBu 6n8BPtvG9K737mMacAsrfFFXOveNtD+GW7DXam9P70OoYeJVIP6ZuWq900YeMZvor9wOt 5MDcWkSKwg/Cpy6MA6IBagFTI8Kna98uInddoz4Dr+XbX/g2tKQwwOSa5LUX1eelpNQ== 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=HTE7Rge5; 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 507D3606A31B for ; Thu, 5 Nov 2026 06:38:23 +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=HTE7Rge5 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3081F1F00A16; Thu, 5 Nov 2026 06:38:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793860703; bh=7+j85nzl2zC+6eFpOE4tO71tHI7dTH1G+8o1HEDJfMA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HTE7Rge5tTaoNWBMhtNlAX/ZOLYLxml21RlwrlsBsmm5Qo+Vlj5QQ7zcugE2lrgd6 xBtukf4UmK3om/eX7I47rIC95qUCcM5j1cN1epv1/7UlTG89/ytS/exX7guVT8hWdv VZ/rOs2QBQBF1RHWX0DF25e4h1Hh3xft8zz1ZlBXp1TXGWz/3LDGCIPLdN91UJXluN 42AQLSF8JZeVC8oTHwh4EIRNyzVcEnDuHmsMuYpxWyqBCifuwxj2dSwglF+x2VJKAJ VwEy/najvxTrxruU/1lV03972dv1qqX11VdDqML6kiorK0tZ47syT/wrrEpJf+wSql n6nZmeF+4zZlA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v6 7/7] selftests: mptcp: sockopt: check app_limited Date: Thu, 5 Nov 2026 14:38:03 +0800 Message-ID: <30807971ab2ce40b1c8d9a73e96e7472e1329910.1793860134.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 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