提交 f48e3924 编写于 作者: T Tejun Heo

cgroup: always use cgroup_next_child() to walk the children list

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: NTejun Heo <tj@kernel.org>
Acked-by: NLi Zefan <lizefan@huawei.com>
上级 3b287a50
...@@ -800,9 +800,8 @@ struct cgroup *cgroup_next_child(struct cgroup *pos, struct cgroup *cgrp); ...@@ -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. * the start of the next iteration by, for example, bumping the css refcnt.
*/ */
#define cgroup_for_each_child(pos, cgrp) \ #define cgroup_for_each_child(pos, cgrp) \
for ((pos) = list_first_or_null_rcu(&(cgrp)->children, \ for ((pos) = cgroup_next_child(NULL, (cgrp)); (pos); \
struct cgroup, sibling); \ (pos) = cgroup_next_child((pos), (cgrp)))
(pos); (pos) = cgroup_next_child((pos), (cgrp)))
struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,
struct cgroup *cgroup); struct cgroup *cgroup);
......
...@@ -3112,7 +3112,7 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, ...@@ -3112,7 +3112,7 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,
pos = cgroup; pos = cgroup;
/* visit the first child if exists */ /* 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) if (next)
return next; return next;
...@@ -3151,7 +3151,7 @@ struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos) ...@@ -3151,7 +3151,7 @@ struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos)
last = pos; last = pos;
/* ->prev isn't RCU safe, walk ->next till the end */ /* ->prev isn't RCU safe, walk ->next till the end */
pos = NULL; pos = NULL;
list_for_each_entry_rcu(tmp, &last->children, sibling) cgroup_for_each_child(tmp, last)
pos = tmp; pos = tmp;
} while (pos); } while (pos);
...@@ -3165,8 +3165,7 @@ static struct cgroup *cgroup_leftmost_descendant(struct cgroup *pos) ...@@ -3165,8 +3165,7 @@ static struct cgroup *cgroup_leftmost_descendant(struct cgroup *pos)
do { do {
last = pos; last = pos;
pos = list_first_or_null_rcu(&pos->children, struct cgroup, pos = cgroup_next_child(NULL, pos);
sibling);
} while (pos); } while (pos);
return last; return last;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册