From: Nick Piggin <piggin@cyberone.com.au>

If refill_inactive_zone() is running in its dont-reclaim-mapped-memory mode
we are tossing away the referenced infomation on active mapped pages.

So put that info back if we're not going to deactivate the page.


---

 mm/vmscan.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff -puN mm/vmscan.c~vm-refill_inactive-preserve-referenced mm/vmscan.c
--- 25/mm/vmscan.c~vm-refill_inactive-preserve-referenced	2004-02-28 23:37:56.000000000 -0800
+++ 25-akpm/mm/vmscan.c	2004-02-28 23:37:56.000000000 -0800
@@ -664,17 +664,17 @@ refill_inactive_zone(struct zone *zone, 
 		page = list_entry(l_hold.prev, struct page, lru);
 		list_del(&page->lru);
 		if (page_mapped(page)) {
-			pte_chain_lock(page);
-			if (page_mapped(page) && page_referenced(page)) {
-				pte_chain_unlock(page);
+			if (!reclaim_mapped) {
 				list_add(&page->lru, &l_active);
 				continue;
 			}
-			pte_chain_unlock(page);
-			if (!reclaim_mapped) {
+			pte_chain_lock(page);
+			if (page_referenced(page)) {
+				pte_chain_unlock(page);
 				list_add(&page->lru, &l_active);
 				continue;
 			}
+			pte_chain_unlock(page);
 		}
 		/*
 		 * FIXME: need to consider page_count(page) here if/when we

_