• Paul Menage's avatar
    cgroups: add a per-subsystem hierarchy_mutex · 999cd8a4
    Paul Menage authored
    These patches introduce new locking/refcount support for cgroups to
    reduce the need for subsystems to call cgroup_lock(). This will
    ultimately allow the atomicity of cgroup_rmdir() (which was removed
    recently) to be restored.
    
    These three patches give:
    
    1/3 - introduce a per-subsystem hierarchy_mutex which a subsystem can
         use to prevent changes to its own cgroup tree
    
    2/3 - use hierarchy_mutex in place of calling cgroup_lock() in the
         memory controller
    
    3/3 - introduce a css_tryget() function similar to the one recently
          proposed by Kamezawa, but avoiding spurious refcount failures in
          the event of a race between a css_tryget() and an unsuccessful
          cgroup_rmdir()
    
    Future patches will likely involve:
    
    - using hierarchy mutex in place of cgroup_lock() in more subsystems
     where appropriate
    
    - restoring the atomicity of cgroup_rmdir() with respect to cgroup_create()
    
    This patch:
    
    Add a hierarchy_mutex to the cgroup_subsys object that protects changes to
    the hierarchy observed by that subsystem.  It is taken by the cgroup
    subsystem (in addition to cgroup_mutex) for the following operations:
    
    - linking a cgroup into that subsystem's cgroup tree
    - unlinking a cgroup from that subsystem's cgroup tree
    - moving the subsystem to/from a hierarchy (including across the
      bind() callback)
    
    Thus if the subsystem holds its own hierarchy_mutex, it can safely
    traverse its own hierarchy.
    Signed-off-by: default avatarPaul Menage <menage@google.com>
    Tested-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    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>
    999cd8a4
cgroup.c 82.8 KB