mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-11 07:30:16 +00:00
cgroup: update init_css() into init_and_link_css()
init_css() takes the cgroup the new css belongs to as an argument and initializes the new css's ->cgroup and ->parent pointers but doesn't acquire the matching reference counts. After the previous patch, create_css() puts init_css() and reference acquisition right next to each other. Let's move reference acquistion into init_css() and rename the function to init_and_link_css(). This makes sense and is easier to follow. This makes the root csses to hold a reference on cgrp_dfl_root.cgrp, which is harmless. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com>
This commit is contained in:
parent
a2bed8209a
commit
ddfcadab35
@ -4109,17 +4109,21 @@ static void css_release(struct percpu_ref *ref)
|
||||
call_rcu(&css->rcu_head, css_free_rcu_fn);
|
||||
}
|
||||
|
||||
static void init_css(struct cgroup_subsys_state *css, struct cgroup_subsys *ss,
|
||||
struct cgroup *cgrp)
|
||||
static void init_and_link_css(struct cgroup_subsys_state *css,
|
||||
struct cgroup_subsys *ss, struct cgroup *cgrp)
|
||||
{
|
||||
cgroup_get(cgrp);
|
||||
|
||||
css->cgroup = cgrp;
|
||||
css->ss = ss;
|
||||
css->flags = 0;
|
||||
|
||||
if (cgrp->parent)
|
||||
if (cgrp->parent) {
|
||||
css->parent = cgroup_css(cgrp->parent, ss);
|
||||
else
|
||||
css_get(css->parent);
|
||||
} else {
|
||||
css->flags |= CSS_ROOT;
|
||||
}
|
||||
|
||||
BUG_ON(cgroup_css(cgrp, ss));
|
||||
}
|
||||
@ -4185,9 +4189,7 @@ static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss)
|
||||
if (IS_ERR(css))
|
||||
return PTR_ERR(css);
|
||||
|
||||
init_css(css, ss, cgrp);
|
||||
cgroup_get(cgrp);
|
||||
css_get(css->parent);
|
||||
init_and_link_css(css, ss, cgrp);
|
||||
|
||||
err = percpu_ref_init(&css->refcnt, css_release);
|
||||
if (err)
|
||||
@ -4656,7 +4658,7 @@ static void __init cgroup_init_subsys(struct cgroup_subsys *ss)
|
||||
css = ss->css_alloc(cgroup_css(&cgrp_dfl_root.cgrp, ss));
|
||||
/* We don't handle early failures gracefully */
|
||||
BUG_ON(IS_ERR(css));
|
||||
init_css(css, ss, &cgrp_dfl_root.cgrp);
|
||||
init_and_link_css(css, ss, &cgrp_dfl_root.cgrp);
|
||||
|
||||
/* Update the init_css_set to contain a subsys
|
||||
* pointer to this state - since the subsystem is
|
||||
|
Loading…
x
Reference in New Issue
Block a user