diff options
author | Sven Wegener <sven.wegener@stealer.net> | 2008-07-16 11:13:56 (GMT) |
---|---|---|
committer | Sven Wegener <sven.wegener@stealer.net> | 2008-07-16 22:33:20 (GMT) |
commit | ba6fd85021dec97d58373d9aea4bea8fc24258be (patch) | |
tree | 4c79457a5cb6dbf634de1c0d3e95f6261199c704 /net/ipv4/ipvs | |
parent | 998e7a76804b7a273a0460c2cdd5a51fa9856717 (diff) | |
download | linux-ba6fd85021dec97d58373d9aea4bea8fc24258be.tar.xz |
ipvs: Put backup thread on mcast socket wait queue
Instead of doing an endless loop with sleeping for one second, we now put the
backup thread onto the mcast socket wait queue and it gets woken up as soon as
we have data to process.
Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
Acked-by: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'net/ipv4/ipvs')
-rw-r--r-- | net/ipv4/ipvs/ip_vs_sync.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c index 550563a..cf5ed75 100644 --- a/net/ipv4/ipvs/ip_vs_sync.c +++ b/net/ipv4/ipvs/ip_vs_sync.c @@ -29,6 +29,7 @@ #include <linux/udp.h> #include <linux/err.h> #include <linux/kthread.h> +#include <linux/wait.h> #include <net/ip.h> #include <net/sock.h> @@ -772,6 +773,10 @@ static int sync_thread_backup(void *data) ip_vs_backup_mcast_ifn, ip_vs_backup_syncid); while (!kthread_should_stop()) { + wait_event_interruptible(*tinfo->sock->sk->sk_sleep, + !skb_queue_empty(&tinfo->sock->sk->sk_receive_queue) + || kthread_should_stop()); + /* do we have data now? */ while (!skb_queue_empty(&(tinfo->sock->sk->sk_receive_queue))) { len = ip_vs_receive(tinfo->sock, tinfo->buf, @@ -787,8 +792,6 @@ static int sync_thread_backup(void *data) ip_vs_process_message(tinfo->buf, len); local_bh_enable(); } - - msleep_interruptible(1000); } /* release the sending multicast socket */ |