public inbox for mptcp@lists.linux.dev
 help / color / mirror / Atom feed
From: Geliang Tang <geliang@kernel.org>
To: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>,
	MPTCP Upstream <mptcp@lists.linux.dev>
Subject: Re: [PATCH mptcp-next 03/11] mptcp: only reset subflow errors when propagated
Date: Sun, 04 Jan 2026 11:30:30 +0800	[thread overview]
Message-ID: <f142ce4aab700eff3bbbdebd6ee9d3b1fb370f7a.camel@kernel.org> (raw)
In-Reply-To: <20251226-mptcp-issue-603-v1-3-bb30e331b839@kernel.org>

Hi Matt,

On Fri, 2025-12-26 at 07:40 +0100, Matthieu Baerts (NGI0) wrote:
> Some subflow socket errors need to be reported to the MPTCP socket:
> the
> initial subflow connect (MP_CAPABLE), and the ones from the fallback
> sockets. The others are not propagated.
> 
> The issue is that sock_error() was used to retrieve the error, which
> was
> also resetting the sk_err field. Because of that, when notifying the
> userspace about subflow close events later on from the MPTCP worker,
> the
> ssk->sk_err field was always 0.
> 
> Now, the error (sk_err) is only reset when propagating it to the msk.
> 
> Fixes: 15cc10453398 ("mptcp: deliver ssk errors to msk")
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
> ---
> Note: I guess we could also duplicate the error in
> mptcp_subflow_context
> struct before scheduling the worker, and use this field in
> mptcp_event_put_token_and_ssk(), but I don't see why we should always
> reset ssk->sk_err in __mptcp_subflow_error_report() in all cases.
> ---
>  net/mptcp/protocol.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 1d68648b5194..5d6c987089c6 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -817,10 +817,9 @@ static bool __mptcp_ofo_queue(struct mptcp_sock
> *msk)
>  
>  static bool __mptcp_subflow_error_report(struct sock *sk, struct
> sock *ssk)
>  {
> -	int err = sock_error(ssk);
>  	int ssk_state;
>  
> -	if (!err)
> +	if (!READ_ONCE(ssk->sk_err))
>  		return false;

Your fix works. I'm wondering if swapping the order of 'if (sk-
>sk_state != TCP_SYN_SENT && !__mptcp_check_fallback(mptcp_sk(sk)))'
and 'if (!err)' would be a bit simpler, i.e.:

int err = sock_error(ssk);
int ssk_state;

if (sk->sk_state != TCP_SYN_SENT &&
    !__mptcp_check_fallback(mptcp_sk(sk)))
        return false;

if (!err)
        return false;

WDYT?

Thanks,
-Geliang

>  
>  	/* only propagate errors on fallen-back sockets or
> @@ -837,7 +836,7 @@ static bool __mptcp_subflow_error_report(struct
> sock *sk, struct sock *ssk)
>  	ssk_state = inet_sk_state_load(ssk);
>  	if (ssk_state == TCP_CLOSE && !sock_flag(sk, SOCK_DEAD))
>  		mptcp_set_state(sk, ssk_state);
> -	WRITE_ONCE(sk->sk_err, -err);
> +	WRITE_ONCE(sk->sk_err, -sock_error(ssk));
>  
>  	/* This barrier is coupled with smp_rmb() in mptcp_poll() */
>  	smp_wmb();

  reply	other threads:[~2026-01-04  3:30 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-26  6:40 [PATCH mptcp-next 00/11] mptcp: avoid dup events + error + misc Matthieu Baerts (NGI0)
2025-12-26  6:40 ` [PATCH mptcp-next 01/11] mptcp: avoid dup SUB_CLOSED events after disconnect Matthieu Baerts (NGI0)
2026-01-04  3:15   ` Geliang Tang
2025-12-26  6:40 ` [PATCH mptcp-next 02/11] selftests: mptcp: check no dup close events after error Matthieu Baerts (NGI0)
2026-01-04  3:17   ` Geliang Tang
2025-12-26  6:40 ` [PATCH mptcp-next 03/11] mptcp: only reset subflow errors when propagated Matthieu Baerts (NGI0)
2026-01-04  3:30   ` Geliang Tang [this message]
2026-01-04  4:00     ` Geliang Tang
2025-12-26  6:40 ` [PATCH mptcp-next 04/11] selftests: mptcp: check subflow errors in close events Matthieu Baerts (NGI0)
2025-12-26  6:40 ` [PATCH mptcp-next 05/11] selftests: mptcp: join: wait for estab event instead of MPJ Matthieu Baerts (NGI0)
2025-12-28  2:41   ` Geliang Tang
2025-12-26  6:40 ` [PATCH mptcp-next 06/11] selftests: mptcp: join: fix wait_mpj helper Matthieu Baerts (NGI0)
2025-12-26  6:40 ` [PATCH mptcp-next 07/11] selftests: mptcp: join: userspace: wait for new events Matthieu Baerts (NGI0)
2025-12-28  2:48   ` Geliang Tang
2026-01-26 18:59     ` Matthieu Baerts
2025-12-26  6:40 ` [PATCH mptcp-next 08/11] selftests: mptcp: join chk_stale_nr: avoid dup stats Matthieu Baerts (NGI0)
2025-12-28  2:25   ` Geliang Tang
2025-12-28  4:43     ` Geliang Tang
2025-12-26  6:40 ` [PATCH mptcp-next 09/11] selftests: mptcp: join: avoid declaring i if not used Matthieu Baerts (NGI0)
2025-12-28  2:51   ` Geliang Tang
2025-12-26  6:40 ` [PATCH mptcp-next 10/11] selftests: mptcp: connect: fix maybe-uninitialize warn Matthieu Baerts (NGI0)
2025-12-28  2:54   ` Geliang Tang
2026-01-26 19:02     ` Matthieu Baerts
2025-12-26  6:40 ` [PATCH mptcp-next 11/11] selftests: mptcp: connect cleanup TFO setup Matthieu Baerts (NGI0)
2025-12-28  2:59   ` Geliang Tang
2025-12-26  7:51 ` [PATCH mptcp-next 00/11] mptcp: avoid dup events + error + misc MPTCP CI

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f142ce4aab700eff3bbbdebd6ee9d3b1fb370f7a.camel@kernel.org \
    --to=geliang@kernel.org \
    --cc=matttbe@kernel.org \
    --cc=mptcp@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox