Re: [PATCH mptcp-next RFC 3/3] mptcp: pm: kernel: skip operating on closing connections

Paolo Abeni <[email protected]>
Newsgroups dev.linux.lists.mptcp
Message-ID <[email protected]>
On 8/17/26 1:07 PM, Matthieu Baerts wrote:
> On 17/08/2026 09:39, Paolo Abeni wrote:
>> On 8/14/26 8:31 PM, Matthieu Baerts (NGI0) wrote:
>>> When iterating over each MPTCP connection after having manipulated MPTCP
>>> endpoints, there is no need to operate on closing (or not ready)
>>> connections.
>>>
>>> We can then safely skip those.
>>>
>>> Note that mptcp_nl_add_subflow_or_signal_addr() was already checking the
>>> fully_established state, but it is better to check the connection state,
>>> which is what mptcp_is_fully_established() is doing.
>>>
>>> Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
>>> ---
>>>  net/mptcp/pm_kernel.c | 16 +++++++++++-----
>>>  1 file changed, 11 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c
>>> index d3014bf57bf3..c185e53fe42b 100644
>>> --- a/net/mptcp/pm_kernel.c
>>> +++ b/net/mptcp/pm_kernel.c
>>> @@ -969,7 +969,7 @@ static int mptcp_nl_add_subflow_or_signal_addr(struct net *net,
>>>  		struct sock *sk = (struct sock *)msk;
>>>  		struct mptcp_addr_info mpc_addr;
>>>  
>>> -		if (!READ_ONCE(msk->fully_established) ||
>>> +		if (!mptcp_is_fully_established(sk) ||
>>>  		    mptcp_pm_is_userspace(msk))
>>>  			goto next;
>>
>> I'm a little double-minded here.
>>
>> The add/removal operations are issued by the user space to update
>> subflows, as a consequence of endpoint addition/removal.
>>
>> Possibly removing the subflow even for not fully established connections
>> could be the right thing to do, I'm not 110% sure either way. Possibly
>> worth to call this out with a comment?
> 
> Indeed, I'm also not sure. Initially, I only converted this
> READ_ONCE(msk->fully_established), also because later in
> mptcp_pm_create_subflow_or_signal_addr(), mptcp_is_fully_established()
> is used.
> 
> Probably best to stick to this one.
> 
> On the other hand, I just noticed that there is no check for "fallback
> done" here: so the operations leading to a notification (ADD_ADDR,
> RM_ADDR) will send a dup-ACK (pure ACK without MPTCP options), and
> adding an MPTCP endpoint will lead to... the creation of a new subflow,
> even after a fallback, e.g.

Sorry, I was not clear enough. I'm specifically doubtful WRT the remove
operations (i.e. mptcp_nl_flush_addrs_list,
mptcp_nl_remove_id_zero_address,
mptcp_nl_remove_subflow_and_signal_addr) and _not_ vs the 'add' one
(mptcp_nl_add_subflow_or_signal_addr). I'm fine with the check change there.

>> Also the asymmetry with the user-space PM is a bit strange. I can't
>> recall why it was needed in the first place?!?
> 
> Are you talking about all the mptcp_pm_is_userspace() checks? If yes,
> they are required because the pm_type sysctl could be changed, and we
> could end-up with a mix of msk handled by different PMs in the same
> netns.
> 
> It would be better to do the opposite I guess:
> 
>   if (!mptcp_pm_is_kernel(msk))
>       goto next;
Yup, I prefer the check this way more.

My doubt is that user-space will allow creating subflow even for not
established msk.

/P
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.