From bbdde1fc716f8fa474d9c463ca2e27c2d5dce876 Mon Sep 17 00:00:00 2001 From: Daisuke Nishimura Date: Thu, 2 Apr 2009 16:57:43 -0700 Subject: [PATCH] --- yaml --- r: 139667 b: refs/heads/master c: 3c776e64660028236313f0e54f3a9945764422df h: refs/heads/master i: 139665: 006ca288885c5dd450b0cd217689b024c8aa0c49 139663: 10a3cebea39bf5deb6e0092b2502aa85101d51e7 v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 6f6a526aadcf..8772330770f9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3918b96e03b2b8dd05889320623f6870e81d35ec +refs/heads/master: 3c776e64660028236313f0e54f3a9945764422df diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index 7bb14fdc780c..81b0ae8183d0 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -994,13 +994,24 @@ static int __mem_cgroup_try_charge(struct mm_struct *mm, static struct mem_cgroup *try_get_mem_cgroup_from_swapcache(struct page *page) { struct mem_cgroup *mem; + struct page_cgroup *pc; swp_entry_t ent; + VM_BUG_ON(!PageLocked(page)); + if (!PageSwapCache(page)) return NULL; - ent.val = page_private(page); - mem = lookup_swap_cgroup(ent); + pc = lookup_page_cgroup(page); + /* + * Used bit of swapcache is solid under page lock. + */ + if (PageCgroupUsed(pc)) + mem = pc->mem_cgroup; + else { + ent.val = page_private(page); + mem = lookup_swap_cgroup(ent); + } if (!mem) return NULL; if (!css_tryget(&mem->css))