[PATCH 12/14] page-replace-rotate.patch

Peter Zijlstra
2005-12-30T22:42:14Z

From: Peter Zijlstra <a.p.zijlstra@chello.nl>

page-replace interface function:
__page_replace_rotate_reclaimable()

This function moves the page so that it will be available to the next
candidate scan.

Removes the knowledge of the page reclaim lists from the actual function.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>

include/linux/mm_page_replace.h | 15 ++++++++++++++-
mm/page_replace.c | 1 -
mm/swap.c | 6 +-----
3 files changed, 15 insertions(+), 7 deletions(-)

Index: linux-2.6-git/include/linux/mm_page_replace.h
===================================================================
--- linux-2.6-git.orig/include/linux/mm_page_replace.h
+++ linux-2.6-git/include/linux/mm_page_replace.h
@@ -6,6 +6,7 @@
#include <linux/mmzone.h>
#include <linux/mm.h>
#include <linux/list.h>
+#include <linux/page-flags.h>

#define lru_to_page(_head) (list_entry((_head)->prev, struct page, lru))

@@ -39,12 +40,24 @@

void __page_replace_insert(struct zone *, struct page *);
void page_replace_candidates(struct zone *, int, struct list_head *);
-static inline void page_replace_activate(struct page *page)
+
+static inline
+void page_replace_activate(struct page *page)
{
SetPageActive(page);
}
+
void page_replace_reinsert(struct zone *, struct list_head *);

+static inline
+void __page_replace_rotate_reclaimable(struct zone *zone, struct page *page)
+{
+ if (PageLRU(page) && !PageActive(page)) {
+ list_move_tail(&page->lru, &zone->inactive_list);
+ inc_page_state(pgrotated);
+ }
+}
+
static inline void
add_page_to_active_list(struct zone *zone, struct page *page)
{
Index: linux-2.6-git/mm/page_replace.c
===================================================================
--- linux-2.6-git.orig/mm/page_replace.c
+++ linux-2.6-git/mm/page_replace.c
@@ -1,7 +1,6 @@
#include <linux/mm_page_replace.h>
#include <linux/swap.h>
#include <linux/pagevec.h>
-#include <linux/page-flags.h>
#include <linux/init.h>
#include <linux/rmap.h>
#include <linux/buffer_head.h> /* for try_to_release_page(),
Index: linux-2.6-git/mm/swap.c
===================================================================
--- linux-2.6-git.orig/mm/swap.c
+++ linux-2.6-git/mm/swap.c
@@ -82,11 +82,7 @@ int rotate_reclaimable_page(struct page

zone = page_zone(page);
spin_lock_irqsave(&zone->lru_lock, flags);
- if (PageLRU(page) && !PageActive(page)) {
- list_del(&page->lru);
- list_add_tail(&page->lru, &zone->inactive_list);
- inc_page_state(pgrotated);
- }
+ __page_replace_rotate_reclaimable(zone, page);
if (!test_clear_page_writeback(page))
BUG();
spin_unlock_irqrestore(&zone->lru_lock, flags);