Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc76df70 authored by Tejun Heo's avatar Tejun Heo
Browse files

cgroup: reserve ID 0 for dummy_root and 1 for unified hierarchy



Before 1a574231 ("cgroup: make hierarchy_id use cyclic idr"),
hierarchy IDs were allocated from 0.  As the dummy hierarchy was
always the one first initialized, it got assigned 0 and all other
hierarchies from 1.  The patch accidentally changed the minimum
useable ID to 2.

Let's restore ID 0 for dummy_root and while at it reserve 1 for
unified hierarchy.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarLi Zefan <lizefan@huawei.com>
Cc: stable@vger.kernel.org
parent 30159ec7
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -1425,14 +1425,15 @@ static void init_cgroup_root(struct cgroupfs_root *root)
	init_cgroup_housekeeping(cgrp);
}

static int cgroup_init_root_id(struct cgroupfs_root *root)
static int cgroup_init_root_id(struct cgroupfs_root *root, int start, int end)
{
	int id;

	lockdep_assert_held(&cgroup_mutex);
	lockdep_assert_held(&cgroup_root_mutex);

	id = idr_alloc_cyclic(&cgroup_hierarchy_idr, root, 2, 0, GFP_KERNEL);
	id = idr_alloc_cyclic(&cgroup_hierarchy_idr, root, start, end,
			      GFP_KERNEL);
	if (id < 0)
		return id;

@@ -1635,7 +1636,8 @@ static struct dentry *cgroup_mount(struct file_system_type *fs_type,
		if (ret)
			goto unlock_drop;

		ret = cgroup_init_root_id(root);
		/* ID 0 is reserved for dummy root, 1 for unified hierarchy */
		ret = cgroup_init_root_id(root, 2, 0);
		if (ret)
			goto unlock_drop;

@@ -4898,7 +4900,7 @@ int __init cgroup_init(void)
	key = css_set_hash(init_css_set.subsys);
	hash_add(css_set_table, &init_css_set.hlist, key);

	BUG_ON(cgroup_init_root_id(&cgroup_dummy_root));
	BUG_ON(cgroup_init_root_id(&cgroup_dummy_root, 0, 1));

	mutex_unlock(&cgroup_root_mutex);
	mutex_unlock(&cgroup_mutex);