diff options
author | YAMAMOTO Takashi <yamamoto@valinux.co.jp> | 2008-03-28 17:15:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-28 17:45:21 -0400 |
commit | 1d4a788f15302877ff2cb08f22009e290a36a209 (patch) | |
tree | 51d2733fb81a75903e4b0f8a5d2ce9f903361ff0 /kernel/fork.c | |
parent | 8c703d35fa91911dd92a18c31a718853f483ad80 (diff) |
memcgroup: fix spurious EBUSY on memory cgroup removal
Call mm_free_cgroup earlier. Otherwise a reference due to lazy mm switching
can prevent cgroup removal.
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Paul Menage <menage@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index dd249c37b3a3..9c042f901570 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -394,7 +394,6 @@ void __mmdrop(struct mm_struct *mm) | |||
394 | { | 394 | { |
395 | BUG_ON(mm == &init_mm); | 395 | BUG_ON(mm == &init_mm); |
396 | mm_free_pgd(mm); | 396 | mm_free_pgd(mm); |
397 | mm_free_cgroup(mm); | ||
398 | destroy_context(mm); | 397 | destroy_context(mm); |
399 | free_mm(mm); | 398 | free_mm(mm); |
400 | } | 399 | } |
@@ -416,6 +415,7 @@ void mmput(struct mm_struct *mm) | |||
416 | spin_unlock(&mmlist_lock); | 415 | spin_unlock(&mmlist_lock); |
417 | } | 416 | } |
418 | put_swap_token(mm); | 417 | put_swap_token(mm); |
418 | mm_free_cgroup(mm); | ||
419 | mmdrop(mm); | 419 | mmdrop(mm); |
420 | } | 420 | } |
421 | } | 421 | } |