aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2013-09-06 15:31:08 -0400
committerTejun Heo <tj@kernel.org>2013-09-10 09:41:00 -0400
commit58b79a91f57efec9457de8ff93a4cc4fb8daf753 (patch)
treeeb7d3c84c5102506fe222d905761167c9c68373d /kernel
parent26b0332e30c7f93e780aaa054bd84e3437f84354 (diff)
cgroup: fix cgroup post-order descendant walk of empty subtree
bd8815a6d8 ("cgroup: make css_for_each_descendant() and friends include the origin css in the iteration") updated cgroup descendant iterators to include the origin css; unfortuantely, it forgot to drop special case handling in css_next_descendant_post() for empty subtree leading to failure to visit the origin css without any child. Fix it by dropping the special case handling and always returning the leftmost descendant on the first iteration. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/cgroup.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index e0aeb32415ff..8075b72d22be 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -3187,11 +3187,9 @@ css_next_descendant_post(struct cgroup_subsys_state *pos,
3187 3187
3188 WARN_ON_ONCE(!rcu_read_lock_held()); 3188 WARN_ON_ONCE(!rcu_read_lock_held());
3189 3189
3190 /* if first iteration, visit the leftmost descendant */ 3190 /* if first iteration, visit leftmost descendant which may be @root */
3191 if (!pos) { 3191 if (!pos)
3192 next = css_leftmost_descendant(root); 3192 return css_leftmost_descendant(root);
3193 return next != root ? next : NULL;
3194 }
3195 3193
3196 /* if we visited @root, we're done */ 3194 /* if we visited @root, we're done */
3197 if (pos == root) 3195 if (pos == root)