diff options
| author | Julian Anastasov <ja@ssi.bg> | 2013-09-12 04:21:10 -0400 |
|---|---|---|
| committer | Simon Horman <horms@verge.net.au> | 2013-09-18 15:40:20 -0400 |
| commit | d1ee4fea0b6946dd8bc61b46db35ea80af7af34b (patch) | |
| tree | a44e72832ed85b3ed661dc6ac93e439abb1bbf72 /net | |
| parent | 742617b176909e586a4cf9b142c996c25986fce8 (diff) | |
ipvs: stats should not depend on CPU 0
When reading percpu stats we need to properly reset
the sum when CPU 0 is not present in the possible mask.
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'net')
| -rw-r--r-- | net/netfilter/ipvs/ip_vs_est.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/netfilter/ipvs/ip_vs_est.c b/net/netfilter/ipvs/ip_vs_est.c index 6bee6d0c73a5..1425e9a924c4 100644 --- a/net/netfilter/ipvs/ip_vs_est.c +++ b/net/netfilter/ipvs/ip_vs_est.c | |||
| @@ -59,12 +59,13 @@ static void ip_vs_read_cpu_stats(struct ip_vs_stats_user *sum, | |||
| 59 | struct ip_vs_cpu_stats __percpu *stats) | 59 | struct ip_vs_cpu_stats __percpu *stats) |
| 60 | { | 60 | { |
| 61 | int i; | 61 | int i; |
| 62 | bool add = false; | ||
| 62 | 63 | ||
| 63 | for_each_possible_cpu(i) { | 64 | for_each_possible_cpu(i) { |
| 64 | struct ip_vs_cpu_stats *s = per_cpu_ptr(stats, i); | 65 | struct ip_vs_cpu_stats *s = per_cpu_ptr(stats, i); |
| 65 | unsigned int start; | 66 | unsigned int start; |
| 66 | __u64 inbytes, outbytes; | 67 | __u64 inbytes, outbytes; |
| 67 | if (i) { | 68 | if (add) { |
| 68 | sum->conns += s->ustats.conns; | 69 | sum->conns += s->ustats.conns; |
| 69 | sum->inpkts += s->ustats.inpkts; | 70 | sum->inpkts += s->ustats.inpkts; |
| 70 | sum->outpkts += s->ustats.outpkts; | 71 | sum->outpkts += s->ustats.outpkts; |
| @@ -76,6 +77,7 @@ static void ip_vs_read_cpu_stats(struct ip_vs_stats_user *sum, | |||
| 76 | sum->inbytes += inbytes; | 77 | sum->inbytes += inbytes; |
| 77 | sum->outbytes += outbytes; | 78 | sum->outbytes += outbytes; |
| 78 | } else { | 79 | } else { |
| 80 | add = true; | ||
| 79 | sum->conns = s->ustats.conns; | 81 | sum->conns = s->ustats.conns; |
| 80 | sum->inpkts = s->ustats.inpkts; | 82 | sum->inpkts = s->ustats.inpkts; |
| 81 | sum->outpkts = s->ustats.outpkts; | 83 | sum->outpkts = s->ustats.outpkts; |
