diff options
author | Tejun Heo <tj@kernel.org> | 2013-08-13 20:22:50 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2013-08-13 20:22:50 -0400 |
commit | f20104de55a212a9742d8df1807f1f29dc95b748 (patch) | |
tree | c7686dae4a73615ba67dc6fd4cfe9e7b89cf9708 /include/linux/cgroup.h | |
parent | 223dbc38d2a8745a93749dc75ed909e274ce075d (diff) | |
download | linux-f20104de55a212a9742d8df1807f1f29dc95b748.tar.gz linux-f20104de55a212a9742d8df1807f1f29dc95b748.tar.bz2 linux-f20104de55a212a9742d8df1807f1f29dc95b748.zip |
cgroup: replace cgroup->css_kill_cnt with ->nr_css
Currently, css (cgroup_subsys_state) lifetime is tied to that of the
associated cgroup. With the planned unified hierarchy, css's will be
dynamically created and destroyed within the lifetime of a cgroup. To
enable such usages, css's will be individually RCU protected instead
of being tied to the cgroup.
cgroup->css_kill_cnt is used during cgroup destruction to wait for css
reference count disable; however, this model doesn't work once css's
lifetimes are managed separately from cgroup's. This patch replaces
it with cgroup->nr_css which is an cgroup_mutex protected integer
counting the number of attached css's. The count is incremented from
online_css() and decremented after refcnt kill is confirmed. If the
count reaches zero and the cgroup is marked dead, the second stage of
cgroup destruction is kicked off. If a cgroup doesn't have any css
attached at the time of rmdir, cgroup_destroy_locked() now invokes the
second stage directly as no css kill confirmation would happen.
cgroup_offline_fn() - the second step of cgroup destruction - is
renamed to cgroup_destroy_css_killed() and now expects to be called
with cgroup_mutex held.
While this patch changes how css destruction is punted to work items,
it shouldn't change any visible behavior.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Li Zefan <lizefan@huawei.com>
Diffstat (limited to 'include/linux/cgroup.h')
-rw-r--r-- | include/linux/cgroup.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index eb200b5794e7..80dca872f4d4 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -171,6 +171,9 @@ struct cgroup { */ int id; + /* the number of attached css's */ + int nr_css; + /* * We link our 'sibling' struct into our parent's 'children'. * Our children link their 'sibling' into our 'children'. @@ -234,7 +237,6 @@ struct cgroup { /* For css percpu_ref killing and RCU-protected deletion */ struct rcu_head rcu_head; struct work_struct destroy_work; - atomic_t css_kill_cnt; /* List of events which userspace want to receive */ struct list_head event_list; |