diff options
| -rw-r--r-- | include/linux/cgroup.h | 2 | ||||
| -rw-r--r-- | kernel/cgroup.c | 9 | 
2 files changed, 4 insertions, 7 deletions
| diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 5047355b9a0..8bda1294c03 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -707,7 +707,7 @@ struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos);   *   * If a subsystem synchronizes against the parent in its ->css_online() and   * before starting iterating, and synchronizes against @pos on each - * iteration, any descendant cgroup which finished ->css_offline() is + * iteration, any descendant cgroup which finished ->css_online() is   * guaranteed to be visible in the future iterations.   *   * In other words, the following guarantees that a descendant can't escape diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 38b13655304..31e9ef31907 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2954,11 +2954,8 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,  	WARN_ON_ONCE(!rcu_read_lock_held());  	/* if first iteration, pretend we just visited @cgroup */ -	if (!pos) { -		if (list_empty(&cgroup->children)) -			return NULL; +	if (!pos)  		pos = cgroup; -	}  	/* visit the first child if exists */  	next = list_first_or_null_rcu(&pos->children, struct cgroup, sibling); @@ -2966,14 +2963,14 @@ struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos,  		return next;  	/* no child, visit my or the closest ancestor's next sibling */ -	do { +	while (pos != cgroup) {  		next = list_entry_rcu(pos->sibling.next, struct cgroup,  				      sibling);  		if (&next->sibling != &pos->parent->children)  			return next;  		pos = pos->parent; -	} while (pos != cgroup); +	}  	return NULL;  } |