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);
 }