tcp: tcp_prequeue() can use keyed wakeups
authorEric Dumazet <dada1@cosmosbay.com>
Thu, 7 May 2009 07:20:39 +0000 (07:20 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 May 2009 21:52:28 +0000 (14:52 -0700)
We can avoid waking up tasks not interested in receive notifications,
using wake_up_interruptible_poll() instead of wake_up_interruptible()

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tcp.h

index ac37228..87d210b 100644 (file)
@@ -908,7 +908,8 @@ static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb)
 
                tp->ucopy.memory = 0;
        } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) {
-               wake_up_interruptible(sk->sk_sleep);
+               wake_up_interruptible_poll(sk->sk_sleep,
+                                          POLLIN | POLLRDNORM | POLLRDBAND);
                if (!inet_csk_ack_scheduled(sk))
                        inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
                                                  (3 * TCP_RTO_MIN) / 4,