diff options
| author | Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> | 2009-04-30 18:08:11 -0400 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-05-02 18:36:09 -0400 | 
| commit | c0bd3f63ce01a1757dbce6373122a05fbf99ced7 (patch) | |
| tree | 4034e701106d1ed819441f4f32a04dfa020398ae | |
| parent | 1e50cc9022d6c0b9175d804573e3f401d00d1381 (diff) | |
memcg: fix try_get_mem_cgroup_from_swapcache()
This is a bugfix for commit 3c776e64660028236313f0e54f3a9945764422df
("memcg: charge swapcache to proper memcg").
Used bit of swapcache is solid under page lock, but considering
move_account, pc->mem_cgroup is not.
We need lock_page_cgroup() anyway.
Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | mm/memcontrol.c | 5 | 
1 files changed, 2 insertions, 3 deletions
| diff --git a/mm/memcontrol.c b/mm/memcontrol.c index e44fb0fbb80e..575203ae2109 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -1024,9 +1024,7 @@ static struct mem_cgroup *try_get_mem_cgroup_from_swapcache(struct page *page) | |||
| 1024 | return NULL; | 1024 | return NULL; | 
| 1025 | 1025 | ||
| 1026 | pc = lookup_page_cgroup(page); | 1026 | pc = lookup_page_cgroup(page); | 
| 1027 | /* | 1027 | lock_page_cgroup(pc); | 
| 1028 | * Used bit of swapcache is solid under page lock. | ||
| 1029 | */ | ||
| 1030 | if (PageCgroupUsed(pc)) { | 1028 | if (PageCgroupUsed(pc)) { | 
| 1031 | mem = pc->mem_cgroup; | 1029 | mem = pc->mem_cgroup; | 
| 1032 | if (mem && !css_tryget(&mem->css)) | 1030 | if (mem && !css_tryget(&mem->css)) | 
| @@ -1040,6 +1038,7 @@ static struct mem_cgroup *try_get_mem_cgroup_from_swapcache(struct page *page) | |||
| 1040 | mem = NULL; | 1038 | mem = NULL; | 
| 1041 | rcu_read_unlock(); | 1039 | rcu_read_unlock(); | 
| 1042 | } | 1040 | } | 
| 1041 | unlock_page_cgroup(pc); | ||
| 1043 | return mem; | 1042 | return mem; | 
| 1044 | } | 1043 | } | 
| 1045 | 1044 | ||
