lkml.org 
[lkml]   [2013]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 14/23] cgroup: always use cgroup_next_child() to walk the children list
    Date
    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>
    ---
    include/linux/cgroup.h | 5 ++---
    kernel/cgroup.c | 7 +++----
    2 files changed, 5 insertions(+), 7 deletions(-)

    diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
    index a91c304..df6ab19 100644
    --- a/include/linux/cgroup.h
    +++ b/include/linux/cgroup.h
    @@ -801,9 +801,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);
    diff --git a/kernel/cgroup.c b/kernel/cgroup.c
    index e88b50e..7b53b58 100644
    --- a/kernel/cgroup.c
    +++ b/kernel/cgroup.c
    @@ -3105,7 +3105,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;

    @@ -3144,7 +3144,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);

    @@ -3158,8 +3158,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;
    --
    1.8.3.1


    \
     
     \ /
      Last update: 2013-08-02 00:21    [W:2.150 / U:0.560 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site