diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2007-08-10 18:50:30 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-08-14 01:52:15 -0400 |
commit | cae7ca3d3de48851e929de9469397749638df779 (patch) | |
tree | 2919ea031c5dcc43668f080faa3a463ac04cfed6 | |
parent | 7f353bf29e162459f2f1e2ca25e41011fae65241 (diff) |
[IPVS]: Use IP_VS_WAIT_WHILE when encessary.
For architectures that don't have a volatile atomic_ts constructs like
while (atomic_read(&something)); might result in endless loops since a
barrier() is missing which forces the compiler to generate code that
actually reads memory contents.
Fix this in ipvs by using the IP_VS_WAIT_WHILE macro which resolves to
while (expr) { cpu_relax(); }
(why isn't this open coded btw?)
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
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_ctl.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/ipvs/ip_vs_ctl.c b/net/ipv4/ipvs/ip_vs_ctl.c index c32781d0ead2..902fd578aa3c 100644 --- a/net/ipv4/ipvs/ip_vs_ctl.c +++ b/net/ipv4/ipvs/ip_vs_ctl.c | |||
@@ -908,7 +908,7 @@ ip_vs_edit_dest(struct ip_vs_service *svc, struct ip_vs_dest_user *udest) | |||
908 | write_lock_bh(&__ip_vs_svc_lock); | 908 | write_lock_bh(&__ip_vs_svc_lock); |
909 | 909 | ||
910 | /* Wait until all other svc users go away */ | 910 | /* Wait until all other svc users go away */ |
911 | while (atomic_read(&svc->usecnt) > 1) {}; | 911 | IP_VS_WAIT_WHILE(atomic_read(&svc->usecnt) > 1); |
912 | 912 | ||
913 | /* call the update_service, because server weight may be changed */ | 913 | /* call the update_service, because server weight may be changed */ |
914 | svc->scheduler->update_service(svc); | 914 | svc->scheduler->update_service(svc); |