struct cgroup *root, int cpu)
 {
        struct cgroup_rstat_cpu *rstatc;
+       struct cgroup *parent;
 
        if (pos == root)
                return NULL;
         * We're gonna walk down to the first leaf and visit/remove it.  We
         * can pick whatever unvisited node as the starting point.
         */
-       if (!pos)
+       if (!pos) {
                pos = root;
-       else
+               /* return NULL if this subtree is not on-list */
+               if (!cgroup_rstat_cpu(pos, cpu)->updated_next)
+                       return NULL;
+       } else {
                pos = cgroup_parent(pos);
+       }
 
        /* walk down to the first leaf */
        while (true) {
         * However, due to the way we traverse, @pos will be the first
         * child in most cases. The only exception is @root.
         */
-       if (rstatc->updated_next) {
-               struct cgroup *parent = cgroup_parent(pos);
-
-               if (parent) {
-                       struct cgroup_rstat_cpu *prstatc;
-                       struct cgroup **nextp;
-
-                       prstatc = cgroup_rstat_cpu(parent, cpu);
-                       nextp = &prstatc->updated_children;
-                       while (*nextp != pos) {
-                               struct cgroup_rstat_cpu *nrstatc;
-
-                               nrstatc = cgroup_rstat_cpu(*nextp, cpu);
-                               WARN_ON_ONCE(*nextp == parent);
-                               nextp = &nrstatc->updated_next;
-                       }
-                       *nextp = rstatc->updated_next;
-               }
+       parent = cgroup_parent(pos);
+       if (parent) {
+               struct cgroup_rstat_cpu *prstatc;
+               struct cgroup **nextp;
 
-               rstatc->updated_next = NULL;
-               return pos;
+               prstatc = cgroup_rstat_cpu(parent, cpu);
+               nextp = &prstatc->updated_children;
+               while (*nextp != pos) {
+                       struct cgroup_rstat_cpu *nrstatc;
+
+                       nrstatc = cgroup_rstat_cpu(*nextp, cpu);
+                       WARN_ON_ONCE(*nextp == parent);
+                       nextp = &nrstatc->updated_next;
+               }
+               *nextp = rstatc->updated_next;
        }
 
-       /* only happens for @root */
-       return NULL;
+       rstatc->updated_next = NULL;
+       return pos;
 }
 
 /* see cgroup_rstat_flush() */