From nobody Wed Sep 17 20:11:36 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 1270326B778 for ; Wed, 9 Jul 2025 07:25:59 +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=1752045960; cv=none; b=FsJtlHekozn5l2JTqz+y318KPpnwyFlUIsy7Cn+Lks4IK89E8tMNkBQgBwKg64PLBibp97qEM85ys+tq6hKu38tZI/wEbZ+yWbtE26nlYaJePjYauWFEu/pHriswp/GWr0cVXEdopb9MzKk25M11+ljmWmslaCx9h67oFFI4xX4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752045960; c=relaxed/simple; bh=OjbFbRCuqzvUduDjZoX/Ing2VFQrPaLPZMKGgUW54Bc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W5yRd8kmtOsWHKLoVLJXTUFDQiIezuGfifUaDGW+E9y90tr1dIvuKmSLb+bT9sJrLf0a8tfU/HiuaJYjjsX/O5IPM3LwlVUOV3WGiEz0whM1xn48CO4lk1RwARfqUPL3DQxvu7b5EhWm6TLxPheUnGEJwI9FDc/Mjw6Shxc3WJA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tfrXpU88; 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="tfrXpU88" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48B58C4CEF1; Wed, 9 Jul 2025 07:25:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752045959; bh=OjbFbRCuqzvUduDjZoX/Ing2VFQrPaLPZMKGgUW54Bc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tfrXpU88+W/GdVDacVTG7JKSYND+i0MJca+4IvlGbtyLml0i3DjfxBpOCAjcyMkxA FH2E5gLIJ5IdgFwHf+nQojPcrlgcDE0pjWLqxJnUq+f+Z1gz3KKTJews6kadDihtJd dqYhKVdn1QNBvhKwReILZjLd52Gry4izKTciaunrB+3ITtH8Bo+KIdNprQEkY06HLa EXf99YlX8JZlGizpYKb5nsri0sSD9ghlPUUeXEUAYoI2nSXalwOapQniN/NrxB8u1Q mdAxEUvuJl7pPM+LWc9vQ3NHyJ3U5Kfbvqnia6+S8cvkHEo6qYQgY8yeS1r730fGN1 0aPG7RXK6Luvw== From: Geliang Tang To: mptcp@lists.linux.dev, matttbe@kernel.org, hare@kernel.org, pabeni@redhat.com Cc: Geliang Tang Subject: [PATCH mptcp-next v8 4/7] mptcp: add recv_should_stop helper Date: Wed, 9 Jul 2025 15:25:31 +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 mptcp_recv_should_stop() from mptcp_recvmsg() to check whether to stop receiving. It will be used in mptcp_splice_read() too. Suggested-by: Paolo Abeni Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 59 ++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index fc429d175ede..1fe04ec05ebd 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2090,12 +2090,40 @@ static unsigned int mptcp_inq_hint(const struct soc= k *sk) return 0; } =20 +static int mptcp_recv_should_stop(struct sock *sk, long timeo, int *shutdo= wn) +{ + if (sk->sk_err) + return sock_error(sk); + + if (sk->sk_shutdown & RCV_SHUTDOWN) { + *shutdown =3D 1; + /* race breaker: the shutdown could be after the + * previous receive queue check + */ + if (__mptcp_move_skbs(sk)) + *shutdown =3D 0; + return 0; + } + + 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; +} + static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len) { struct mptcp_sock *msk =3D mptcp_sk(sk); struct scm_timestamping_internal tss; int copied =3D 0, cmsg_flags =3D 0; + int shutdown =3D -1; int target; long timeo; =20 @@ -2146,34 +2174,11 @@ static int mptcp_recvmsg(struct sock *sk, struct ms= ghdr *msg, size_t len, signal_pending(current)) break; } else { - if (sk->sk_err) { - copied =3D sock_error(sk); + copied =3D mptcp_recv_should_stop(sk, timeo, &shutdown); + if (copied < 0 || shutdown =3D=3D 1) break; - } - - if (sk->sk_shutdown & RCV_SHUTDOWN) { - /* race breaker: the shutdown could be after the - * previous receive queue check - */ - if (__mptcp_move_skbs(sk)) - continue; - break; - } - - 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; - } + if (shutdown =3D=3D 0) + continue; } =20 pr_debug("block timeout %ld\n", timeo); --=20 2.48.1