From 05d943288256fd4e947e53227abd390ad71a50ea Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Mon, 19 Nov 2012 08:13:37 -0800 Subject: [PATCH] --- yaml --- r: 339339 b: refs/heads/master c: 02ae7486d05ae6df8395409a4945b2420f1e35c2 h: refs/heads/master i: 339337: cc0a1d56709eb15210de139a3549c3a25d9c0797 339335: 09f0aa179a503ed0cde20a9eb802f49669646977 v: v3 --- [refs] | 2 +- trunk/kernel/cgroup.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 7e1c12dbd711..a32b449f5b26 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 648bb56d076bde31113f09a7d24d95bc8d4155ac +refs/heads/master: 02ae7486d05ae6df8395409a4945b2420f1e35c2 diff --git a/trunk/kernel/cgroup.c b/trunk/kernel/cgroup.c index 09751657abdc..5679cb1ce43f 100644 --- a/trunk/kernel/cgroup.c +++ b/trunk/kernel/cgroup.c @@ -4420,9 +4420,10 @@ int __init_or_module cgroup_load_subsys(struct cgroup_subsys *ss) if (ss->use_id) { int ret = cgroup_init_idr(ss, css); if (ret) { - dummytop->subsys[ss->subsys_id] = NULL; ss->destroy(dummytop); + dummytop->subsys[ss->subsys_id] = NULL; subsys[ss->subsys_id] = NULL; + list_del_init(&ss->sibling); mutex_unlock(&cgroup_mutex); return ret; } @@ -4490,7 +4491,19 @@ void cgroup_unload_subsys(struct cgroup_subsys *ss) */ BUG_ON(ss->root != &rootnode); + /* ->pre_destroy() should be called outside cgroup_mutex for now */ + if (ss->pre_destroy) + ss->pre_destroy(dummytop); + mutex_lock(&cgroup_mutex); + + ss->active = 0; + + if (ss->use_id) { + idr_remove_all(&ss->idr); + idr_destroy(&ss->idr); + } + /* deassign the subsys_id */ subsys[ss->subsys_id] = NULL;