]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mptcp: allow overridden write_space to be invoked
authorGeliang Tang <tanggeliang@kylinos.cn>
Fri, 6 Feb 2026 13:09:24 +0000 (14:09 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 11 Feb 2026 03:54:21 +0000 (19:54 -0800)
Future extensions with psock will override their own sk->sk_write_space
callback. This patch ensures that the overridden sk_write_space can be
invoked by MPTCP.

INDIRECT_CALL is used to keep the default path optimised.

Note that sk->sk_write_space was never called directly with MPTCP
sockets, so changing it to sk_stream_write_space in the init, and using
it from mptcp_write_space() is not supposed to change the current
behaviour.

This patch is shared early to ease discussions around future RFC and
avoid confusions with this "fix" that is needed for different future
extensions.

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Co-developed-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260206-net-next-mptcp-write_space-override-v2-1-e0b12be818c6@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/protocol.c
net/mptcp/protocol.h

index e0b4745bbaa9a3cd02d35a6052ec14fe79979891..cf1852b999637ee373030cc4a1c35b9a99757048 100644 (file)
@@ -3058,6 +3058,7 @@ static int mptcp_init_sock(struct sock *sk)
        sk_sockets_allocated_inc(sk);
        sk->sk_rcvbuf = READ_ONCE(net->ipv4.sysctl_tcp_rmem[1]);
        sk->sk_sndbuf = READ_ONCE(net->ipv4.sysctl_tcp_wmem[1]);
+       sk->sk_write_space = sk_stream_write_space;
 
        return 0;
 }
index f4bfe91ca7f9de53d79bf7e86ce98bdf5f245795..0bd1ee860316dd25e88beb1b9ba020abdc32f7cb 100644 (file)
@@ -975,7 +975,7 @@ static inline void mptcp_write_space(struct sock *sk)
        /* pairs with memory barrier in mptcp_poll */
        smp_mb();
        if (mptcp_stream_memory_free(sk, 1))
-               sk_stream_write_space(sk);
+               INDIRECT_CALL_1(sk->sk_write_space, sk_stream_write_space, sk);
 }
 
 static inline void __mptcp_sync_sndbuf(struct sock *sk)