From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752884Ab0JVWvN (ORCPT ); Fri, 22 Oct 2010 18:51:13 -0400 Received: from smtp-out.google.com ([216.239.44.51]:17516 "EHLO smtp-out.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751689Ab0JVWvM (ORCPT ); Fri, 22 Oct 2010 18:51:12 -0400 From: Mandeep Singh Baines To: Andrew Morton , KOSAKI Motohiro , Rik van Riel , Mel Gorman , Minchan Kim , Johannes Weiner Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, wad@chromium.org, olofj@chromium.org, Mandeep Singh Baines Subject: [PATCH] vmscan: move referenced VM_EXEC pages to active list Date: Fri, 22 Oct 2010 15:49:50 -0700 Message-Id: <1287787790-4170-1-git-send-email-msb@chromium.org> X-Mailer: git-send-email 1.7.1 X-System-Of-Record: true Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In commit 64574746, "vmscan: detect mapped file pages used only once", Johannes Weiner, added logic to page_check_reference to cycle again used once pages. In commit 8cab4754, "vmscan: make mapped executable pages the first class citizen", Wu Fengguang, added logic to shrink_active_list which protects file-backed VM_EXEC pages by keeping them in the active_list if they are referenced. This patch adds logic to move such pages from the inactive list to the active list immediately if they have been referenced. If a VM_EXEC page is seen as referenced during an inactive list scan, that reference must have occurred after the page was put on the inactive list. There is no need to wait for the page to be referenced again. Change-Id: I17c312e916377e93e5a92c52518b6c829f9ab30b Signed-off-by: Mandeep Singh Baines --- mm/vmscan.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index c5dfabf..0984dee 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -593,6 +593,17 @@ static enum page_references page_check_references(struct page *page, if (referenced_ptes) { if (PageAnon(page)) return PAGEREF_ACTIVATE; + + /* + * Identify referenced, file-backed active pages and move them + * to the active list. We know that this page has been + * referenced since being put on the inactive list. VM_EXEC + * pages are only moved to the inactive list when they have not + * been referenced between scans (see shrink_active_list). + */ + if ((vm_flags & VM_EXEC) && page_is_file_cache(page)) + return PAGEREF_ACTIVATE; + /* * All mapped pages start out with page table * references from the instantiating fault, so we need -- 1.7.1