]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
cgroup: don't destroy the default root
authorLi Zefan <lizefan@huawei.com>
Wed, 4 Jun 2014 08:48:15 +0000 (16:48 +0800)
committerTejun Heo <tj@kernel.org>
Thu, 5 Jun 2014 01:21:51 +0000 (21:21 -0400)
The default root is allocated and initialized at boot phase, so we
shouldn't destroy the default root when it's umounted, otherwise
it will lead to disaster.

Just try mount and then umount the default root, and the kernel will
crash immediately.

v2:
- No need to check for CSS_NO_REF in cgroup_get/put(). (Tejun)
- Better call cgroup_put() for the default root in kill_sb(). (Tejun)
- Add a comment.

Signed-off-by: Li Zefan <lizefan@huawei.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup.c

index a5f75ac4e793ac84eb5069473684c5c0edcd3699..3f46165829a4f206b7dd3bc4eaaace07008decd3 100644 (file)
@@ -1780,8 +1780,11 @@ static void cgroup_kill_sb(struct super_block *sb)
         * If @root doesn't have any mounts or children, start killing it.
         * This prevents new mounts by disabling percpu_ref_tryget_live().
         * cgroup_mount() may wait for @root's release.
+        *
+        * And don't kill the default root.
         */
-       if (css_has_online_children(&root->cgrp.self))
+       if (css_has_online_children(&root->cgrp.self) ||
+           root == &cgrp_dfl_root)
                cgroup_put(&root->cgrp);
        else
                percpu_ref_kill(&root->cgrp.self.refcnt);