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>
This commit is contained in:
Родитель
742617b176
Коммит
d1ee4fea0b
|
@ -59,12 +59,13 @@ static void ip_vs_read_cpu_stats(struct ip_vs_stats_user *sum,
|
||||||
struct ip_vs_cpu_stats __percpu *stats)
|
struct ip_vs_cpu_stats __percpu *stats)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
bool add = false;
|
||||||
|
|
||||||
for_each_possible_cpu(i) {
|
for_each_possible_cpu(i) {
|
||||||
struct ip_vs_cpu_stats *s = per_cpu_ptr(stats, i);
|
struct ip_vs_cpu_stats *s = per_cpu_ptr(stats, i);
|
||||||
unsigned int start;
|
unsigned int start;
|
||||||
__u64 inbytes, outbytes;
|
__u64 inbytes, outbytes;
|
||||||
if (i) {
|
if (add) {
|
||||||
sum->conns += s->ustats.conns;
|
sum->conns += s->ustats.conns;
|
||||||
sum->inpkts += s->ustats.inpkts;
|
sum->inpkts += s->ustats.inpkts;
|
||||||
sum->outpkts += s->ustats.outpkts;
|
sum->outpkts += s->ustats.outpkts;
|
||||||
|
@ -76,6 +77,7 @@ static void ip_vs_read_cpu_stats(struct ip_vs_stats_user *sum,
|
||||||
sum->inbytes += inbytes;
|
sum->inbytes += inbytes;
|
||||||
sum->outbytes += outbytes;
|
sum->outbytes += outbytes;
|
||||||
} else {
|
} else {
|
||||||
|
add = true;
|
||||||
sum->conns = s->ustats.conns;
|
sum->conns = s->ustats.conns;
|
||||||
sum->inpkts = s->ustats.inpkts;
|
sum->inpkts = s->ustats.inpkts;
|
||||||
sum->outpkts = s->ustats.outpkts;
|
sum->outpkts = s->ustats.outpkts;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче