LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

[PATCH 03/18] ipvs: zero percpu stats

To: netdev@xxxxxxxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxx, netfilter@xxxxxxxxxxxxxxx, lvs-devel@xxxxxxxxxxxxxxx
Subject: [PATCH 03/18] ipvs: zero percpu stats
Cc: Julian Anastasov <ja@xxxxxx>, Hans Schillstrom <hans@xxxxxxxxxxxxxxx>, Simon Horman <horms@xxxxxxxxxxxx>
From: Simon Horman <horms@xxxxxxxxxxxx>
Date: Sun, 6 Mar 2011 08:45:45 +0900
From: Julian Anastasov <ja@xxxxxx>

        Zero the new percpu stats because we copy from there.

Signed-off-by: Julian Anastasov <ja@xxxxxx>
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
---
 net/netfilter/ipvs/ip_vs_ctl.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index a2a67ad..fd74527 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -715,8 +715,25 @@ static void ip_vs_trash_cleanup(struct net *net)
 static void
 ip_vs_zero_stats(struct ip_vs_stats *stats)
 {
+       struct ip_vs_cpu_stats *cpustats = stats->cpustats;
+       int i;
+
        spin_lock_bh(&stats->lock);
 
+       for_each_possible_cpu(i) {
+               struct ip_vs_cpu_stats *u = per_cpu_ptr(cpustats, i);
+               unsigned int start;
+
+               /* Do not pretend to be writer, it is enough to
+                * sync with writers that modify the u64 counters
+                * because under stats->lock we are the only reader.
+                */
+               do {
+                       start = u64_stats_fetch_begin(&u->syncp);
+                       memset(&u->ustats, 0, sizeof(u->ustats));
+               } while (u64_stats_fetch_retry(&u->syncp, start));
+       }
+
        memset(&stats->ustats, 0, sizeof(stats->ustats));
        ip_vs_zero_estimator(stats);
 
-- 
1.7.2.3

--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

<Prev in Thread] Current Thread [Next in Thread>