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 <john.dykstra1@gmail.com> Acked-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d44b5e07c6
commit
9dc20c5f78
|
@ -33,7 +33,8 @@ void sk_stream_write_space(struct sock *sk)
|
||||||
clear_bit(SOCK_NOSPACE, &sock->flags);
|
clear_bit(SOCK_NOSPACE, &sock->flags);
|
||||||
|
|
||||||
if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
|
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))
|
if (sock->fasync_list && !(sk->sk_shutdown & SEND_SHUTDOWN))
|
||||||
sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT);
|
sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue