cgroup: always use cgroup_next_child() to walk the children list
authorTejun Heo <tj@kernel.org>
Fri, 9 Aug 2013 00:11:24 +0000 (20:11 -0400)
committerTejun Heo <tj@kernel.org>
Fri, 9 Aug 2013 00:11:24 +0000 (20:11 -0400)
There are several places where the children list is accessed directly.
This patch converts those places to use cgroup_next_child().  This
will help updating the hierarchy iterators to use @css instead of
@cgrp.

While cgroup_next_child() can be heavy in pathological cases - e.g. a
lot of dead children, this shouldn't cause any noticeable behavior
differences.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Li Zefan <lizefan@huawei.com>
include/linux/cgroup.h
kernel/cgroup.c

index 5f9ba58817173ecf5d5dcd87865ef7fbd8d86ae3..c288bce428f86b88b97002f69c55b944ac4b09d5 100644 (file)
@@ -800,9 +800,8 @@ struct cgroup *cgroup_next_child(struct cgroup *pos, struct cgroup *cgrp);
  * the start of the next iteration by, for example, bumping the css refcnt.
  */
 #define cgroup_for_each_child(pos, cgrp)                               \
-       for ((pos) = list_first_or_null_rcu(&(cgrp)->children,          \
-                                           struct cgroup, sibling);    \
-            (pos); (pos) = cgroup_next_child((pos), (cgrp)))
+       for ((pos) = cgroup_next_child(NULL, (cgrp)); (pos);            \
+            (pos) = cgroup_next_child((pos), (cgrp)))
 
 struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,
                                          struct cgroup *cgroup);
index dd55244952bdb45a0c50f9b711c6845f022dcffd..2b7354faaca7b9987667a4ed5b02666d43f9073f 100644 (file)
@@ -3112,7 +3112,7 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,
                pos = cgroup;
 
        /* visit the first child if exists */
-       next = list_first_or_null_rcu(&pos->children, struct cgroup, sibling);
+       next = cgroup_next_child(NULL, pos);
        if (next)
                return next;
 
@@ -3151,7 +3151,7 @@ struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos)
                last = pos;
                /* ->prev isn't RCU safe, walk ->next till the end */
                pos = NULL;
-               list_for_each_entry_rcu(tmp, &last->children, sibling)
+               cgroup_for_each_child(tmp, last)
                        pos = tmp;
        } while (pos);
 
@@ -3165,8 +3165,7 @@ static struct cgroup *cgroup_leftmost_descendant(struct cgroup *pos)
 
        do {
                last = pos;
-               pos = list_first_or_null_rcu(&pos->children, struct cgroup,
-                                            sibling);
+               pos = cgroup_next_child(NULL, pos);
        } while (pos);
 
        return last;