ipvs: Put backup thread on mcast socket wait queue
authorSven Wegener <sven.wegener@stealer.net>
Wed, 16 Jul 2008 11:13:56 +0000 (11:13 +0000)
committerSven Wegener <sven.wegener@stealer.net>
Wed, 16 Jul 2008 22:33:20 +0000 (22:33 +0000)
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>
net/ipv4/ipvs/ip_vs_sync.c

index 550563a56607b270060c68551d1163a27bb06a52..cf5ed758ea1fa0abcc7cb45ac0272a2775b47c3e 100644 (file)
@@ -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 */