• Tejun Heo's avatar
    cgroup: reimplement rebind_subsystems() using cgroup_apply_control() and friends · 334c3679
    Tejun Heo authored
    rebind_subsystem() open codes quite a bit of css and interface file
    manipulations.  It tries to be fail-safe but doesn't quite achieve it.
    It can be greatly simplified by using the new css management helpers.
    This patch reimplements rebind_subsytsems() using
    cgroup_apply_control() and friends.
    
    * The half-baked rollback on file creation failure is dropped.  It is
      an extremely cold path, failure isn't critical, and, aside from
      kernel bugs, the only reason it can fail is memory allocation
      failure which pretty much doesn't happen for small allocations.
    
    * As cgroup_apply_control_disable() is now used to clean up root
      cgroup on rebind, make sure that it doesn't end up killing root
      csses.
    
    * All callers of rebind_subsystems() are updated to use
      cgroup_lock_and_drain_offline() as the apply_control functions
      require drained subtree.
    
    * This leaves cgroup_refresh_subtree_ss_mask() without any user.
      Removed.
    
    * css_populate_dir() and css_clear_dir() no longer needs
      @cgrp_override parameter.  Dropped.
    
    * While at it, add WARN_ON() to rebind_subsystem() calls which are
      expected to always succeed just in case.
    
    While the rules visible to userland aren't changed, this
    reimplementation not only simplifies rebind_subsystems() but also
    allows it to disable and enable csses recursively.  This can be used
    to implement more flexible rebinding.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarZefan Li <lizefan@huawei.com>
    334c3679
cgroup.c 166 KB