aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/cgroup.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r--kernel/cgroup.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index c01e8e8dfad0..0343d7ee6d62 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -4593,11 +4593,17 @@ static void __init cgroup_init_subsys(struct cgroup_subsys *ss, bool early)
4593 /* We don't handle early failures gracefully */ 4593 /* We don't handle early failures gracefully */
4594 BUG_ON(IS_ERR(css)); 4594 BUG_ON(IS_ERR(css));
4595 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); 4595 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp);
4596
4597 /*
4598 * Root csses are never destroyed and we can't initialize
4599 * percpu_ref during early init. Disable refcnting.
4600 */
4601 css->flags |= CSS_NO_REF;
4602
4596 if (early) { 4603 if (early) {
4597 /* allocation can't be done safely during early init */ 4604 /* allocation can't be done safely during early init */
4598 css->id = 1; 4605 css->id = 1;
4599 } else { 4606 } else {
4600 BUG_ON(percpu_ref_init(&css->refcnt, css_release));
4601 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); 4607 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL);
4602 BUG_ON(css->id < 0); 4608 BUG_ON(css->id < 0);
4603 } 4609 }
@@ -4636,6 +4642,8 @@ int __init cgroup_init_early(void)
4636 int i; 4642 int i;
4637 4643
4638 init_cgroup_root(&cgrp_dfl_root, &opts); 4644 init_cgroup_root(&cgrp_dfl_root, &opts);
4645 cgrp_dfl_root.cgrp.self.flags |= CSS_NO_REF;
4646
4639 RCU_INIT_POINTER(init_task.cgroups, &init_css_set); 4647 RCU_INIT_POINTER(init_task.cgroups, &init_css_set);
4640 4648
4641 for_each_subsys(ss, i) { 4649 for_each_subsys(ss, i) {
@@ -4684,7 +4692,6 @@ int __init cgroup_init(void)
4684 struct cgroup_subsys_state *css = 4692 struct cgroup_subsys_state *css =
4685 init_css_set.subsys[ss->id]; 4693 init_css_set.subsys[ss->id];
4686 4694
4687 BUG_ON(percpu_ref_init(&css->refcnt, css_release));
4688 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, 4695 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2,
4689 GFP_KERNEL); 4696 GFP_KERNEL);
4690 BUG_ON(css->id < 0); 4697 BUG_ON(css->id < 0);