diff options
author | Kirill A. Shutemov <kirill@shutemov.name> | 2010-03-10 18:22:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-12 18:52:37 -0500 |
commit | a0a4db548edcce067c1201ef25cf2bc29f32dca4 (patch) | |
tree | 6f8139a582179666cd248d978332ed0e32ad9f0f /mm/memcontrol.c | |
parent | 4ab78683c17d739c2a2077141dcf81a02b7fb57e (diff) |
cgroups: remove events before destroying subsystem state objects
Events should be removed after rmdir of cgroup directory, but before
destroying subsystem state objects. Let's take reference to cgroup
directory dentry to do that.
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hioryu@jp.fujitsu.com>
Cc: Paul Menage <menage@google.com>
Acked-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: Pavel Emelyanov <xemul@openvz.org>
Cc: Dan Malek <dan@embeddedalley.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 9 |
1 files changed, 0 insertions, 9 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f9ae4b4c36eb..f7b910fc14fb 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -3361,12 +3361,6 @@ static int mem_cgroup_register_event(struct cgroup *cgrp, struct cftype *cft, | |||
3361 | } | 3361 | } |
3362 | } | 3362 | } |
3363 | 3363 | ||
3364 | /* | ||
3365 | * We need to increment refcnt to be sure that all thresholds | ||
3366 | * will be unregistered before calling __mem_cgroup_free() | ||
3367 | */ | ||
3368 | mem_cgroup_get(memcg); | ||
3369 | |||
3370 | if (type == _MEM) | 3364 | if (type == _MEM) |
3371 | rcu_assign_pointer(memcg->thresholds, thresholds_new); | 3365 | rcu_assign_pointer(memcg->thresholds, thresholds_new); |
3372 | else | 3366 | else |
@@ -3460,9 +3454,6 @@ assign: | |||
3460 | /* To be sure that nobody uses thresholds before freeing it */ | 3454 | /* To be sure that nobody uses thresholds before freeing it */ |
3461 | synchronize_rcu(); | 3455 | synchronize_rcu(); |
3462 | 3456 | ||
3463 | for (i = 0; i < thresholds->size - size; i++) | ||
3464 | mem_cgroup_put(memcg); | ||
3465 | |||
3466 | kfree(thresholds); | 3457 | kfree(thresholds); |
3467 | unlock: | 3458 | unlock: |
3468 | mutex_unlock(&memcg->thresholds_lock); | 3459 | mutex_unlock(&memcg->thresholds_lock); |