Commit e226d925 authored by Paolo Abeni's avatar Paolo Abeni Committed by Jakub Kicinski
Browse files

mptcp: fix spurious wake-up on under memory pressure



The wake-up condition currently implemented by mptcp_epollin_ready()
is wrong, as it could mark the MPTCP socket as readable even when
no data are present and the system is under memory pressure.

Explicitly check for some data being available in the receive queue.

Fixes: 5684ab1a ("mptcp: give rcvlowat some love")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Reviewed-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250113-net-mptcp-connect-st-flakes-v1-2-0d986ee7b1b6@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2ca06a2f
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -760,10 +760,15 @@ static inline u64 mptcp_data_avail(const struct mptcp_sock *msk)

static inline bool mptcp_epollin_ready(const struct sock *sk)
{
	u64 data_avail = mptcp_data_avail(mptcp_sk(sk));

	if (!data_avail)
		return false;

	/* mptcp doesn't have to deal with small skbs in the receive queue,
	 * at it can always coalesce them
	 * as it can always coalesce them
	 */
	return (mptcp_data_avail(mptcp_sk(sk)) >= sk->sk_rcvlowat) ||
	return (data_avail >= sk->sk_rcvlowat) ||
	       (mem_cgroup_sockets_enabled && sk->sk_memcg &&
		mem_cgroup_under_socket_pressure(sk->sk_memcg)) ||
	       READ_ONCE(tcp_memory_pressure);