diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 33a1141be5e862de56ff3801d025b8fc99253575..37b4fa1b4ea36410eadb6f346232fd5060c5d712 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4883,12 +4883,6 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg) int node; struct mem_cgroup_extension *memcg_ext; - /* - * Flush percpu vmstats and vmevents to guarantee the value correctness - * on parent's and all ancestor levels. - */ - memcg_flush_percpu_vmstats(memcg); - memcg_flush_percpu_vmevents(memcg); for_each_node(node) free_mem_cgroup_per_node_info(memcg, node); free_percpu(memcg->vmstats_percpu); @@ -4901,6 +4895,12 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg) static void mem_cgroup_free(struct mem_cgroup *memcg) { memcg_wb_domain_exit(memcg); + /* + * Flush percpu vmstats and vmevents to guarantee the value correctness + * on parent's and all ancestor levels. + */ + memcg_flush_percpu_vmstats(memcg); + memcg_flush_percpu_vmevents(memcg); __mem_cgroup_free(memcg); }