From 9a5acaf958e2b587c50e99738f2a1b2824cded7a Mon Sep 17 00:00:00 2001 From: KAMEZAWA Hiroyuki Date: Wed, 27 Oct 2010 15:33:43 -0700 Subject: [PATCH] --- yaml --- r: 218535 b: refs/heads/master c: 26174efd42100eefac67732c0c12f41a205fa335 h: refs/heads/master i: 218533: c3b5cf823cae38e0b082f63d34e1c0c2a60a07e1 218531: 31c1b6a597ef7928e6a4a7f1292528c7a329a799 218527: 7fc77a1f7c7eefc0428005faace89b9d8f70d056 v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 539a22d01e45..c93c5d894ffb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1489ebad8b5b20300562f634f279cb9c435fd90b +refs/heads/master: 26174efd42100eefac67732c0c12f41a205fa335 diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index 52840adae62a..9a99cfaf0a19 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -1591,7 +1591,8 @@ bool mem_cgroup_handle_oom(struct mem_cgroup *mem, gfp_t mask) * small, we check MEM_CGROUP_ON_MOVE percpu value and detect there are * possibility of race condition. If there is, we take a lock. */ -void mem_cgroup_update_file_mapped(struct page *page, int val) + +static void mem_cgroup_update_file_stat(struct page *page, int idx, int val) { struct mem_cgroup *mem; struct page_cgroup *pc = lookup_page_cgroup(page); @@ -1613,13 +1614,18 @@ void mem_cgroup_update_file_mapped(struct page *page, int val) if (!mem || !PageCgroupUsed(pc)) goto out; } - if (val > 0) { - this_cpu_inc(mem->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]); - SetPageCgroupFileMapped(pc); - } else { - this_cpu_dec(mem->stat->count[MEM_CGROUP_STAT_FILE_MAPPED]); - if (!page_mapped(page)) /* for race between dec->inc counter */ + + this_cpu_add(mem->stat->count[idx], val); + + switch (idx) { + case MEM_CGROUP_STAT_FILE_MAPPED: + if (val > 0) + SetPageCgroupFileMapped(pc); + else if (!page_mapped(page)) ClearPageCgroupFileMapped(pc); + break; + default: + BUG(); } out: @@ -1629,6 +1635,11 @@ void mem_cgroup_update_file_mapped(struct page *page, int val) return; } +void mem_cgroup_update_file_mapped(struct page *page, int val) +{ + mem_cgroup_update_file_stat(page, MEM_CGROUP_STAT_FILE_MAPPED, val); +} + /* * size of first charge trial. "32" comes from vmscan.c's magic value. * TODO: maybe necessary to use big numbers in big irons.