aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Horman <horms@verge.net.au>2006-12-11 01:35:24 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-11 17:35:02 -0500
commit89eaeb09ba01632511f69ce8e14c8d2abd2dbe9e (patch)
treef549f2f6d8f8262568302380d77673bcfec1c410
parentf654c854d1d4e0aca5389ace541647237eb7f753 (diff)
[IPVS]: Use msleep_interruptable() instead of ssleep() aka msleep()
Dean Manners notices that when an IPVS synchonisation daemons are started the system load slowly climbs up to 1. This seems to be related to the call to ssleep(1) (aka msleep(1000) in the main loop. Replacing this with a call to msleep_interruptable() seems to make the problem go away. Though I'm not sure that it is correct. This is the second edition of this patch, which replaces ssleep() in the main loop for both the master and backup threads, as well as some thread synchronisation code. The latter is just for thorougness as it shouldn't be causing any problems. Signed-Off-By: Simon Horman <horms@verge.net.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/ipvs/ip_vs_sync.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c
index 91a075edd68e..7461eeb3a3dd 100644
--- a/net/ipv4/ipvs/ip_vs_sync.c
+++ b/net/ipv4/ipvs/ip_vs_sync.c
@@ -657,7 +657,7 @@ static void sync_master_loop(void)
657 if (stop_master_sync) 657 if (stop_master_sync)
658 break; 658 break;
659 659
660 ssleep(1); 660 msleep_interruptible(1000);
661 } 661 }
662 662
663 /* clean up the sync_buff queue */ 663 /* clean up the sync_buff queue */
@@ -714,7 +714,7 @@ static void sync_backup_loop(void)
714 if (stop_backup_sync) 714 if (stop_backup_sync)
715 break; 715 break;
716 716
717 ssleep(1); 717 msleep_interruptible(1000);
718 } 718 }
719 719
720 /* release the sending multicast socket */ 720 /* release the sending multicast socket */
@@ -826,7 +826,7 @@ static int fork_sync_thread(void *startup)
826 if ((pid = kernel_thread(sync_thread, startup, 0)) < 0) { 826 if ((pid = kernel_thread(sync_thread, startup, 0)) < 0) {
827 IP_VS_ERR("could not create sync_thread due to %d... " 827 IP_VS_ERR("could not create sync_thread due to %d... "
828 "retrying.\n", pid); 828 "retrying.\n", pid);
829 ssleep(1); 829 msleep_interruptible(1000);
830 goto repeat; 830 goto repeat;
831 } 831 }
832 832
@@ -860,7 +860,7 @@ int start_sync_thread(int state, char *mcast_ifn, __u8 syncid)
860 if ((pid = kernel_thread(fork_sync_thread, &startup, 0)) < 0) { 860 if ((pid = kernel_thread(fork_sync_thread, &startup, 0)) < 0) {
861 IP_VS_ERR("could not create fork_sync_thread due to %d... " 861 IP_VS_ERR("could not create fork_sync_thread due to %d... "
862 "retrying.\n", pid); 862 "retrying.\n", pid);
863 ssleep(1); 863 msleep_interruptible(1000);
864 goto repeat; 864 goto repeat;
865 } 865 }
866 866