From mboxrd@z Thu Jan 1 00:00:00 1970 From: KAMEZAWA Hiroyuki Subject: [PATCH 2/12] memcg move charege() call to swapped-in page under lock_page() Date: Thu, 25 Sep 2008 15:14:57 +0900 Message-ID: <20080925151457.0ad68293.kamezawa.hiroyu@jp.fujitsu.com> References: <20080925151124.25898d22.kamezawa.hiroyu@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20080925151124.25898d22.kamezawa.hiroyu@jp.fujitsu.com> Sender: linux-kernel-owner@vger.kernel.org To: KAMEZAWA Hiroyuki Cc: "linux-mm@kvack.org" , "balbir@linux.vnet.ibm.com" , "nishimura@mxp.nes.nec.co.jp" , "xemul@openvz.org" , Andrew Morton , LKML , Dave Hansen , ryov@valinux.co.jp List-Id: linux-mm.kvack.org While page-cache's charge/uncharge is done under page_lock(), swap-cache isn't. (anonymous page is charged when it's newly allocated.) This patch moves do_swap_page()'s charge() call under lock. This helps us to avoid to charge already mapped one, unnecessary calls. Signed-off-by: KAMEZAWA Hiroyuki mm/memory.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) Index: mmotm-2.6.27-rc7+/mm/memory.c =================================================================== --- mmotm-2.6.27-rc7+.orig/mm/memory.c +++ mmotm-2.6.27-rc7+/mm/memory.c @@ -2320,15 +2320,14 @@ static int do_swap_page(struct mm_struct count_vm_event(PGMAJFAULT); } + lock_page(page); + delayacct_clear_flag(DELAYACCT_PF_SWAPIN); + if (mem_cgroup_charge(page, mm, GFP_KERNEL)) { - delayacct_clear_flag(DELAYACCT_PF_SWAPIN); ret = VM_FAULT_OOM; goto out; } - mark_page_accessed(page); - lock_page(page); - delayacct_clear_flag(DELAYACCT_PF_SWAPIN); /* * Back out if somebody else already faulted in this pte.