From: Petr Malat Date: Fri, 16 May 2025 08:17:28 +0000 (+0200) Subject: sctp: Do not wake readers in __sctp_write_space() X-Git-Tag: v6.16-rc1~132^2~73 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af295892a7abbf05a3c2ba7abc4d81bb448623d6;p=thirdparty%2Fkernel%2Flinux.git sctp: Do not wake readers in __sctp_write_space() Function __sctp_write_space() doesn't set poll key, which leads to ep_poll_callback() waking up all waiters, not only these waiting for the socket being writable. Set the key properly using wake_up_interruptible_poll(), which is preferred over the sync variant, as writers are not woken up before at least half of the queue is available. Also, TCP does the same. Signed-off-by: Petr Malat Acked-by: Xin Long Link: https://patch.msgid.link/20250516081727.1361451-1-oss@malat.biz Signed-off-by: Jakub Kicinski --- diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 85a9dfeff4d6a..90b75d4ec3298 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -9100,7 +9100,8 @@ static void __sctp_write_space(struct sctp_association *asoc) wq = rcu_dereference(sk->sk_wq); if (wq) { if (waitqueue_active(&wq->wait)) - wake_up_interruptible(&wq->wait); + wake_up_interruptible_poll(&wq->wait, EPOLLOUT | + EPOLLWRNORM | EPOLLWRBAND); /* Note that we try to include the Async I/O support * here by modeling from the current TCP/UDP code.