On Mon, May 12, 2025 at 8:33 AM Petr Malat <oss@xxxxxxxxx> wrote: > > 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 <oss@xxxxxxxxx> > --- > net/sctp/socket.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/sctp/socket.c b/net/sctp/socket.c > index 53725ee7ba06..b301d64d9d80 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. > -- > 2.39.5 > Acked-by: Xin Long <lucien.xin@xxxxxxxxx>