From: John Dykstra Date: Tue, 12 May 2009 15:34:50 +0000 (+0000) Subject: tcp: tcp_prequeue() can use keyed wakeups X-Git-Tag: firefly_0821_release~13604^2~497 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9dc20c5f78c53bf57fb7874b6e942842e1db20d3;p=firefly-linux-kernel-4.4.55.git tcp: tcp_prequeue() can use keyed wakeups When TCP frees up write buffer space, avoid waking up tasks that have done a poll() or select() on the same socket specifying read-side events. This is an extension of a read-side patch by Eric Dumazet. Signed-off-by: John Dykstra Acked-by: Eric Dumazet Signed-off-by: David S. Miller --- diff --git a/net/core/stream.c b/net/core/stream.c index 8727cead64ad..a37debfeb1b2 100644 --- a/net/core/stream.c +++ b/net/core/stream.c @@ -33,7 +33,8 @@ void sk_stream_write_space(struct sock *sk) clear_bit(SOCK_NOSPACE, &sock->flags); if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) - wake_up_interruptible(sk->sk_sleep); + wake_up_interruptible_poll(sk->sk_sleep, POLLOUT | + POLLWRNORM | POLLWRBAND); if (sock->fasync_list && !(sk->sk_shutdown & SEND_SHUTDOWN)) sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT); }