• Lai Jiangshan's avatar
    cgroups: don't put struct cgroupfs_root protected by RCU · b2aa30f7
    Lai Jiangshan authored
    We don't access struct cgroupfs_root in fast path, so we should not put
    struct cgroupfs_root protected by RCU
    
    But the comment in struct cgroup_subsys.root confuse us.
    
    struct cgroup_subsys.root is used in these places:
    
    1 find_css_set(): if (ss->root->subsys_list.next == &ss->sibling)
    2 rebind_subsystems(): if (ss->root != &rootnode)
                           rcu_assign_pointer(ss->root, root);
                           rcu_assign_pointer(subsys[i]->root, &rootnode);
    3 cgroup_has_css_refs(): if (ss->root != cgrp->root)
    4 cgroup_init_subsys(): ss->root = &rootnode;
    5 proc_cgroupstats_show(): ss->name, ss->root->subsys_bits,
                               ss->root->number_of_cgroups, !ss->disabled);
    6 cgroup_clone(): root = subsys->root;
                      if ((root != subsys->root) ||
    
    All these place we have held cgroup_lock() or we don't dereference to
    struct cgroupfs_root.  It's means wo don't need RCU when use struct
    cgroup_subsys.root, and we should not put struct cgroupfs_root protected
    by RCU.
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Reviewed-by: default avatarPaul Menage <menage@google.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Pavel Emelyanov <xemul@openvz.org>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b2aa30f7
cgroup.c 81.8 KB