diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_core.c | 6 | ||||
-rw-r--r-- | net/netfilter/ipvs/ip_vs_wrr.c | 7 |
2 files changed, 7 insertions, 6 deletions
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c index b227750af752..a986ee20e128 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c | |||
@@ -1259,7 +1259,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, | |||
1259 | struct ip_vs_iphdr iph; | 1259 | struct ip_vs_iphdr iph; |
1260 | struct ip_vs_protocol *pp; | 1260 | struct ip_vs_protocol *pp; |
1261 | struct ip_vs_conn *cp; | 1261 | struct ip_vs_conn *cp; |
1262 | int ret, restart, af; | 1262 | int ret, restart, af, pkts; |
1263 | 1263 | ||
1264 | af = (skb->protocol == htons(ETH_P_IP)) ? AF_INET : AF_INET6; | 1264 | af = (skb->protocol == htons(ETH_P_IP)) ? AF_INET : AF_INET6; |
1265 | 1265 | ||
@@ -1346,12 +1346,12 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, | |||
1346 | * Sync connection if it is about to close to | 1346 | * Sync connection if it is about to close to |
1347 | * encorage the standby servers to update the connections timeout | 1347 | * encorage the standby servers to update the connections timeout |
1348 | */ | 1348 | */ |
1349 | atomic_inc(&cp->in_pkts); | 1349 | pkts = atomic_add_return(1, &cp->in_pkts); |
1350 | if (af == AF_INET && | 1350 | if (af == AF_INET && |
1351 | (ip_vs_sync_state & IP_VS_STATE_MASTER) && | 1351 | (ip_vs_sync_state & IP_VS_STATE_MASTER) && |
1352 | (((cp->protocol != IPPROTO_TCP || | 1352 | (((cp->protocol != IPPROTO_TCP || |
1353 | cp->state == IP_VS_TCP_S_ESTABLISHED) && | 1353 | cp->state == IP_VS_TCP_S_ESTABLISHED) && |
1354 | (atomic_read(&cp->in_pkts) % sysctl_ip_vs_sync_threshold[1] | 1354 | (pkts % sysctl_ip_vs_sync_threshold[1] |
1355 | == sysctl_ip_vs_sync_threshold[0])) || | 1355 | == sysctl_ip_vs_sync_threshold[0])) || |
1356 | ((cp->protocol == IPPROTO_TCP) && (cp->old_state != cp->state) && | 1356 | ((cp->protocol == IPPROTO_TCP) && (cp->old_state != cp->state) && |
1357 | ((cp->state == IP_VS_TCP_S_FIN_WAIT) || | 1357 | ((cp->state == IP_VS_TCP_S_FIN_WAIT) || |
diff --git a/net/netfilter/ipvs/ip_vs_wrr.c b/net/netfilter/ipvs/ip_vs_wrr.c index 70ff82cda57d..6182e8ea0be7 100644 --- a/net/netfilter/ipvs/ip_vs_wrr.c +++ b/net/netfilter/ipvs/ip_vs_wrr.c | |||
@@ -77,11 +77,12 @@ static int ip_vs_wrr_gcd_weight(struct ip_vs_service *svc) | |||
77 | static int ip_vs_wrr_max_weight(struct ip_vs_service *svc) | 77 | static int ip_vs_wrr_max_weight(struct ip_vs_service *svc) |
78 | { | 78 | { |
79 | struct ip_vs_dest *dest; | 79 | struct ip_vs_dest *dest; |
80 | int weight = 0; | 80 | int new_weight, weight = 0; |
81 | 81 | ||
82 | list_for_each_entry(dest, &svc->destinations, n_list) { | 82 | list_for_each_entry(dest, &svc->destinations, n_list) { |
83 | if (atomic_read(&dest->weight) > weight) | 83 | new_weight = atomic_read(&dest->weight); |
84 | weight = atomic_read(&dest->weight); | 84 | if (new_weight > weight) |
85 | weight = new_weight; | ||
85 | } | 86 | } |
86 | 87 | ||
87 | return weight; | 88 | return weight; |