• Tejun Heo's avatar
    cgroup: Fix dom_cgrp propagation when enabling threaded mode · 479adb89
    Tejun Heo authored
    A cgroup which is already a threaded domain may be converted into a
    threaded cgroup if the prerequisite conditions are met.  When this
    happens, all threaded descendant should also have their ->dom_cgrp
    updated to the new threaded domain cgroup.  Unfortunately, this
    propagation was missing leading to the following failure.
    
      # cd /sys/fs/cgroup/unified
      # cat cgroup.subtree_control    # show that no controllers are enabled
    
      # mkdir -p mycgrp/a/b/c
      # echo threaded > mycgrp/a/b/cgroup.type
    
      At this point, the hierarchy looks as follows:
    
          mycgrp [d]
    	  a [dt]
    	      b [t]
    		  c [inv]
    
      Now let's make node "a" threaded (and thus "mycgrp" s made "domain threaded"):
    
      # echo threaded > mycgrp/a/cgroup.type
    
      By this point, we now have a hierarchy that looks as follows:
    
          mycgrp [dt]
    	  a [t]
    	      b [t]
    		  c [inv]
    
      But, when we try to convert the node "c" from "domain invalid" to
      "threaded", we get ENOTSUP on the write():
    
      # echo threaded > mycgrp/a/b/c/cgroup.type
      sh: echo: write error: Operation not supported
    
    This patch fixes the problem by
    
    * Moving the opencoded ->dom_cgrp save and restoration in
      cgroup_enable_threaded() into cgroup_{save|restore}_control() so
      that mulitple cgroups can be handled.
    
    * Updating all threaded descendants' ->dom_cgrp to point to the new
      dom_cgrp when enabling threaded mode.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-and-tested-by: default avatar"Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
    Reported-by: default avatarAmin Jamali <ajamali@pivotal.io>
    Reported-by: default avatarJoao De Almeida Pereira <jpereira@pivotal.io>
    Link: https://lore.kernel.org/r/CAKgNAkhHYCMn74TCNiMJ=ccLd7DcmXSbvw3CbZ1YREeG7iJM5g@mail.gmail.com
    Fixes: 454000ad ("cgroup: introduce cgroup->dom_cgrp and threaded css_set handling")
    Cc: stable@vger.kernel.org # v4.14+
    479adb89
cgroup.c 158 KB