Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f48e3924 authored by Tejun Heo's avatar Tejun Heo
Browse files

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: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarLi Zefan <lizefan@huawei.com>
parent 3b287a50
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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);
+3 −4
Original line number Diff line number Diff line
@@ -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;