Commit 67426b75 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

af_unix: use keyed wakeups

Instead of wakeup all sleepers, use wake_up_interruptible_sync_poll() to
wakeup only ones interested into writing the socket.

This patch is a specialization of commit 37e5540b (epoll keyed
wakeups: make sockets use keyed wakeups).

On a test program provided by Alan Crequy :

Before:
real    0m3.101s
user    0m0.000s
sys     0m6.104s

After:

real	0m0.211s
user	0m0.000s
sys	0m0.208s
Reported-by: default avatarAlban Crequy <alban.crequy@collabora.co.uk>
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Cc: Davide Libenzi <davidel@xmailserver.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fc766e4c
...@@ -316,7 +316,8 @@ static void unix_write_space(struct sock *sk) ...@@ -316,7 +316,8 @@ static void unix_write_space(struct sock *sk)
if (unix_writable(sk)) { if (unix_writable(sk)) {
wq = rcu_dereference(sk->sk_wq); wq = rcu_dereference(sk->sk_wq);
if (wq_has_sleeper(wq)) if (wq_has_sleeper(wq))
wake_up_interruptible_sync(&wq->wait); wake_up_interruptible_sync_poll(&wq->wait,
POLLOUT | POLLWRNORM | POLLWRBAND);
sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT); sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
} }
rcu_read_unlock(); rcu_read_unlock();
...@@ -1710,7 +1711,8 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -1710,7 +1711,8 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
goto out_unlock; goto out_unlock;
} }
wake_up_interruptible_sync(&u->peer_wait); wake_up_interruptible_sync_poll(&u->peer_wait,
POLLOUT | POLLWRNORM | POLLWRBAND);
if (msg->msg_name) if (msg->msg_name)
unix_copy_addr(msg, skb->sk); unix_copy_addr(msg, skb->sk);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment