From: Johannes Weiner <hannes@cmpxchg.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Minchan Kim <minchan.kim@gmail.com>,
Rik van Riel <riel@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: [patch 2/3] vmscan: drop page_mapping_inuse()
Date: Mon, 22 Feb 2010 20:49:09 +0100 [thread overview]
Message-ID: <1266868150-25984-3-git-send-email-hannes@cmpxchg.org> (raw)
In-Reply-To: <1266868150-25984-1-git-send-email-hannes@cmpxchg.org>
page_mapping_inuse() is a historic predicate function for pages that
are about to be reclaimed or deactivated.
According to it, a page is in use when it is mapped into page tables
OR part of swap cache OR backing an mmapped file.
This function is used in combination with page_referenced(), which
checks for young bits in ptes and the page descriptor itself for the
PG_referenced bit. Thus, checking for unmapped swap cache pages is
meaningless as PG_referenced is not set for anonymous pages and
unmapped pages do not have young ptes. The test makes no difference.
Protecting file pages that are not by themselves mapped but are part
of a mapped file is also a historic leftover for short-lived things
like the exec() code in libc. However, the VM now does reference
accounting and activation of pages at unmap time and thus the special
treatment on reclaim is obsolete.
This patch drops page_mapping_inuse() and switches the two callsites
to use page_mapped() directly.
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
---
mm/vmscan.c | 25 ++-----------------------
1 files changed, 2 insertions(+), 23 deletions(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index c2db55b..a8e4cbe 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -262,27 +262,6 @@ unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask,
return ret;
}
-/* Called without lock on whether page is mapped, so answer is unstable */
-static inline int page_mapping_inuse(struct page *page)
-{
- struct address_space *mapping;
-
- /* Page is in somebody's page tables. */
- if (page_mapped(page))
- return 1;
-
- /* Be more reluctant to reclaim swapcache than pagecache */
- if (PageSwapCache(page))
- return 1;
-
- mapping = page_mapping(page);
- if (!mapping)
- return 0;
-
- /* File is mmap'd by somebody? */
- return mapping_mapped(mapping);
-}
-
static inline int is_page_cache_freeable(struct page *page)
{
/*
@@ -603,7 +582,7 @@ static enum page_references page_check_references(struct page *page,
if (vm_flags & VM_LOCKED)
return PAGEREF_RECLAIM;
- if (page_mapping_inuse(page))
+ if (page_mapped(page))
return PAGEREF_ACTIVATE;
/* Reclaim if clean, defer dirty pages to writeback */
@@ -1378,7 +1357,7 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
}
/* page_referenced clears PageReferenced */
- if (page_mapping_inuse(page) &&
+ if (page_mapped(page) &&
page_referenced(page, 0, sc->mem_cgroup, &vm_flags)) {
nr_rotated++;
/*
--
1.6.6.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-02-22 19:49 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-22 19:49 mm: used-once mapped file page detection Johannes Weiner
2010-02-22 19:49 ` [patch 1/3] vmscan: factor out page reference checks Johannes Weiner
2010-02-22 20:27 ` Rik van Riel
2010-02-23 13:38 ` Minchan Kim
2010-02-23 14:21 ` Johannes Weiner
2010-02-23 14:31 ` Rik van Riel
2010-02-23 14:44 ` Minchan Kim
2010-02-23 15:40 ` Johannes Weiner
2010-02-23 16:04 ` Minchan Kim
2010-02-22 19:49 ` Johannes Weiner [this message]
2010-02-22 20:28 ` [patch 2/3] vmscan: drop page_mapping_inuse() Rik van Riel
2010-02-23 14:03 ` Minchan Kim
2010-02-23 14:32 ` Johannes Weiner
2010-02-23 14:48 ` Minchan Kim
2010-02-22 19:49 ` [patch 3/3] vmscan: detect mapped file pages used only once Johannes Weiner
2010-02-22 20:34 ` Rik van Riel
2010-02-23 15:03 ` Minchan Kim
2010-02-23 15:45 ` Johannes Weiner
2010-02-24 21:39 ` mm: used-once mapped file page detection Andrew Morton
2010-02-26 14:32 ` Johannes Weiner
2010-02-28 17:49 ` Rik van Riel
2010-02-28 20:36 ` Johannes Weiner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1266868150-25984-3-git-send-email-hannes@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan.kim@gmail.com \
--cc=riel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox