aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>2008-03-28 17:15:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-03-28 17:45:21 -0400
commit1d4a788f15302877ff2cb08f22009e290a36a209 (patch)
tree51d2733fb81a75903e4b0f8a5d2ce9f903361ff0 /kernel/fork.c
parent8c703d35fa91911dd92a18c31a718853f483ad80 (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.c2
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}