Nick Piggin bf3f3bc5e7 mm: don't mark_page_accessed in fault path
Doing a mark_page_accessed at fault-time, then doing SetPageReferenced at
unmap-time if the pte is young has a number of problems.

mark_page_accessed is supposed to be roughly the equivalent of a young pte
for unmapped references. Unfortunately it doesn't come with any context:
after being called, reclaim doesn't know who or why the page was touched.

So calling mark_page_accessed not only adds extra lru or PG_referenced
manipulations for pages that are already going to have pte_young ptes anyway,
but it also adds these references which are difficult to work with from the
context of vma specific references (eg. MADV_SEQUENTIAL pte_young may not
wish to contribute to the page being referenced).

Then, simply doing SetPageReferenced when zapping a pte and finding it is
young, is not a really good solution either. SetPageReferenced does not
correctly promote the page to the active list for example. So after removing
mark_page_accessed from the fault path, several mmap()+touch+munmap() would
have a very different result from several read(2) calls for example, which
is not really desirable.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Johannes Weiner <hannes@saeurebad.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-01-06 15:58:58 -08:00
..
2008-12-29 11:27:46 +02:00
2008-10-20 08:50:26 -07:00
2008-12-29 11:27:46 +02:00
2008-10-23 08:55:02 -07:00
2008-11-30 10:03:35 -08:00
2008-11-14 11:29:12 +11:00
2007-10-20 01:27:18 +02:00
2008-12-25 11:40:09 +11:00
2008-04-28 08:58:18 -07:00
2008-12-20 09:15:47 +01:00
2009-01-05 17:44:42 -08:00
2008-07-28 16:30:21 -07:00
2009-01-05 17:44:42 -08:00
2009-01-05 17:44:42 -08:00
2009-01-05 11:54:28 -05:00
2009-01-05 11:54:28 -05:00
2008-11-14 11:29:12 +11:00
2008-02-05 09:44:19 -08:00
2008-06-12 18:05:41 -07:00
2009-01-01 10:12:29 +10:30
2007-10-20 01:27:18 +02:00
2008-10-20 08:52:40 -07:00
2009-01-01 10:12:29 +10:30
2009-01-01 10:12:29 +10:30
2008-11-30 10:03:35 -08:00
2008-12-16 18:34:51 +01:00
2009-01-01 10:12:29 +10:30
2009-01-01 10:12:29 +10:30