]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/memcontrol.c
NFS: Switch readdir to using iterate_shared()
[linux.git] / mm / memcontrol.c
index c5b5f74cfd4debb16651552d29a5dfd688c87093..6c83cf4ed970b90e46b29d56a75ba20de4d580b9 100644 (file)
@@ -3287,49 +3287,34 @@ static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css,
        }
 }
 
-static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg, bool slab_only)
+static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg)
 {
-       unsigned long stat[MEMCG_NR_STAT];
+       unsigned long stat[MEMCG_NR_STAT] = {0};
        struct mem_cgroup *mi;
        int node, cpu, i;
-       int min_idx, max_idx;
-
-       if (slab_only) {
-               min_idx = NR_SLAB_RECLAIMABLE;
-               max_idx = NR_SLAB_UNRECLAIMABLE;
-       } else {
-               min_idx = 0;
-               max_idx = MEMCG_NR_STAT;
-       }
-
-       for (i = min_idx; i < max_idx; i++)
-               stat[i] = 0;
 
        for_each_online_cpu(cpu)
-               for (i = min_idx; i < max_idx; i++)
+               for (i = 0; i < MEMCG_NR_STAT; i++)
                        stat[i] += per_cpu(memcg->vmstats_percpu->stat[i], cpu);
 
        for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
-               for (i = min_idx; i < max_idx; i++)
+               for (i = 0; i < MEMCG_NR_STAT; i++)
                        atomic_long_add(stat[i], &mi->vmstats[i]);
 
-       if (!slab_only)
-               max_idx = NR_VM_NODE_STAT_ITEMS;
-
        for_each_node(node) {
                struct mem_cgroup_per_node *pn = memcg->nodeinfo[node];
                struct mem_cgroup_per_node *pi;
 
-               for (i = min_idx; i < max_idx; i++)
+               for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
                        stat[i] = 0;
 
                for_each_online_cpu(cpu)
-                       for (i = min_idx; i < max_idx; i++)
+                       for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
                                stat[i] += per_cpu(
                                        pn->lruvec_stat_cpu->count[i], cpu);
 
                for (pi = pn; pi; pi = parent_nodeinfo(pi, node))
-                       for (i = min_idx; i < max_idx; i++)
+                       for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
                                atomic_long_add(stat[i], &pi->lruvec_stat[i]);
        }
 }
@@ -3403,13 +3388,9 @@ static void memcg_offline_kmem(struct mem_cgroup *memcg)
                parent = root_mem_cgroup;
 
        /*
-        * Deactivate and reparent kmem_caches. Then flush percpu
-        * slab statistics to have precise values at the parent and
-        * all ancestor levels. It's required to keep slab stats
-        * accurate after the reparenting of kmem_caches.
+        * Deactivate and reparent kmem_caches.
         */
        memcg_deactivate_kmem_caches(memcg, parent);
-       memcg_flush_percpu_vmstats(memcg, true);
 
        kmemcg_id = memcg->kmemcg_id;
        BUG_ON(kmemcg_id < 0);
@@ -4913,7 +4894,7 @@ static void mem_cgroup_free(struct mem_cgroup *memcg)
         * Flush percpu vmstats and vmevents to guarantee the value correctness
         * on parent's and all ancestor levels.
         */
-       memcg_flush_percpu_vmstats(memcg, false);
+       memcg_flush_percpu_vmstats(memcg);
        memcg_flush_percpu_vmevents(memcg);
        __mem_cgroup_free(memcg);
 }