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: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com>
This commit is contained in:
Родитель
3b287a505e
Коммит
f48e3924dc
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче