lkml.org 
[lkml]   [2008]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] cpuset: rcu_read_lock() to protect task_cs()

    task_cs() calls cgroup_subsys_state().

    we must use rcu_read_lock() to protect cgroup_subsys_state().

    it's correct that top_cpuset is never freed, but cgroup_subsys_state()
    accesses css_set, this css_set maybe freed when task_cs() called.

    we use use rcu_read_lock() to protect it.

    Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
    ---
    diff --git a/kernel/cpuset.c b/kernel/cpuset.c
    index 3e00526..e0e087e 100644
    --- a/kernel/cpuset.c
    +++ b/kernel/cpuset.c
    @@ -363,14 +363,9 @@ void cpuset_update_task_memory_state(void)
    struct task_struct *tsk = current;
    struct cpuset *cs;

    - if (task_cs(tsk) == &top_cpuset) {
    - /* Don't need rcu for top_cpuset. It's never freed. */
    - my_cpusets_mem_gen = top_cpuset.mems_generation;
    - } else {
    - rcu_read_lock();
    - my_cpusets_mem_gen = task_cs(tsk)->mems_generation;
    - rcu_read_unlock();
    - }
    + rcu_read_lock();
    + my_cpusets_mem_gen = task_cs(tsk)->mems_generation;
    + rcu_read_unlock();

    if (my_cpusets_mem_gen != tsk->cpuset_mems_generation) {
    mutex_lock(&callback_mutex);


    \
     
     \ /
      Last update: 2008-11-21 09:57    [W:0.023 / U:62.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site