[lkml]   [2008]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 1/2] cgroups: enhance task_cgroup()

    task_cgroup() calls cgroup_subsys_state().
    and we must use rcu_read_lock() to protect cgroup_subsys_state().
    so we must use rcu_read_lock() to protect task_cgroup().

    but it'll not so friendly to caller: the callers of task_cgroup() have
    held cgroup_lock(). it means that struct cgroup will not be freed.

    So this patch add rcu_read_lock() in task_cgroup() to enhance task_cgroup().
    And we do NOT NEED FIX task_cgroup()'s callers, and cgroup_lock()
    can protect task_cgroup().

    Signed-off-by: Lai Jiangshan <>
    diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
    index 1164963..22901ff 100644
    --- a/include/linux/cgroup.h
    +++ b/include/linux/cgroup.h
    @@ -359,6 +360,10 @@
    static inline struct cgroup* task_cgroup(struct task_struct *task,
    int subsys_id)
    - return task_subsys_state(task, subsys_id)->cgroup;
    + struct cgroup *ret;
    + rcu_read_lock();
    + ret = task_subsys_state(task, subsys_id)->cgroup;
    + rcu_read_unlock();
    + return ret;

    int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *ss,

     \ /
      Last update: 2008-11-21 09:59    [W:0.031 / U:3.356 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site