forked from Minki/linux
cgroup: bounce cgroup_subsys_state ref kill confirmation to a work item
css (cgroup_subsys_state) offlining, which requires process context, will be moved to ref kill confirmation. In preparation, bounce css_killed handling through css->destroy_work. css_ref_killed_fn() is renamed to css_killed_ref_fn() so that it's consistent with the new css_killed_work_fn(). This patch adds an additional work item bouncing but doesn't change the actual logic. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com>
This commit is contained in:
parent
ae7f164a09
commit
223dbc38d2
@ -4555,12 +4555,27 @@ static void cgroup_css_killed(struct cgroup *cgrp)
|
||||
schedule_work(&cgrp->destroy_work);
|
||||
}
|
||||
|
||||
static void css_ref_killed_fn(struct percpu_ref *ref)
|
||||
/*
|
||||
* This is called when the refcnt of a css is confirmed to be killed.
|
||||
* css_tryget() is now guaranteed to fail.
|
||||
*/
|
||||
static void css_killed_work_fn(struct work_struct *work)
|
||||
{
|
||||
struct cgroup_subsys_state *css =
|
||||
container_of(work, struct cgroup_subsys_state, destroy_work);
|
||||
struct cgroup *cgrp = css->cgroup;
|
||||
|
||||
cgroup_css_killed(cgrp);
|
||||
}
|
||||
|
||||
/* css kill confirmation processing requires process context, bounce */
|
||||
static void css_killed_ref_fn(struct percpu_ref *ref)
|
||||
{
|
||||
struct cgroup_subsys_state *css =
|
||||
container_of(ref, struct cgroup_subsys_state, refcnt);
|
||||
|
||||
cgroup_css_killed(css->cgroup);
|
||||
INIT_WORK(&css->destroy_work, css_killed_work_fn);
|
||||
schedule_work(&css->destroy_work);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -4634,7 +4649,7 @@ static int cgroup_destroy_locked(struct cgroup *cgrp)
|
||||
percpu_ref_get(&css->refcnt);
|
||||
|
||||
atomic_inc(&cgrp->css_kill_cnt);
|
||||
percpu_ref_kill_and_confirm(&css->refcnt, css_ref_killed_fn);
|
||||
percpu_ref_kill_and_confirm(&css->refcnt, css_killed_ref_fn);
|
||||
}
|
||||
cgroup_css_killed(cgrp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user