--- linux/mm/filemap.pre89-2 Thu Feb 26 21:10:44 1998 +++ linux/mm/filemap.c Thu Feb 26 21:19:52 1998 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -158,12 +159,15 @@ switch (atomic_read(&page->count)) { case 1: - /* If it has been referenced recently, don't free it */ - if (test_and_clear_bit(PG_referenced, &page->flags)) - break; - /* is it a swap-cache or page-cache page? */ if (page->inode) { + if (test_and_clear_bit(PG_referenced, &page->flags)) { + touch_page(page); + break; + } + age_page(page); + if (page->age) + break; if (PageSwapCache(page)) { delete_from_swap_cache(page); return 1; @@ -173,6 +177,10 @@ __free_page(page); return 1; } + /* It's not a cache page, so we don't do aging. + * If it has been referenced recently, don't free it */ + if (test_and_clear_bit(PG_referenced, &page->flags)) + break; /* is it a buffer cache page? */ if ((gfp_mask & __GFP_IO) && bh && try_to_free_buffer(bh, &bh, 6))