Commit e5e2e430 authored by Geliang Tang's avatar Geliang Tang Committed by Jakub Kicinski
Browse files

mptcp: allow overridden write_space to be invoked



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: default avatarPaolo Abeni <pabeni@redhat.com>
Co-developed-by: default avatarGang Yan <yangang@kylinos.cn>
Signed-off-by: default avatarGang Yan <yangang@kylinos.cn>
Signed-off-by: default avatarGeliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: default avatarMatthieu 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: default avatarJakub Kicinski <kuba@kernel.org>
parent f2c7fdeb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
}
+1 −1
Original line number Diff line number Diff line
@@ -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)