diff options
author | Simon Horman <horms@verge.net.au> | 2006-12-11 01:35:24 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-12-11 17:35:02 -0500 |
commit | 89eaeb09ba01632511f69ce8e14c8d2abd2dbe9e (patch) | |
tree | f549f2f6d8f8262568302380d77673bcfec1c410 | |
parent | f654c854d1d4e0aca5389ace541647237eb7f753 (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.c | 8 |
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 | ||