If a laundry list is specified then do not write out pages but put dirty pages on a laundry list for later processing. Signed-off-by: Christoph Lameter --- mm/vmscan.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) Index: linux-2.6/mm/vmscan.c =================================================================== --- linux-2.6.orig/mm/vmscan.c 2007-08-19 23:13:28.000000000 -0700 +++ linux-2.6/mm/vmscan.c 2007-08-19 23:27:00.000000000 -0700 @@ -380,16 +380,22 @@ cannot_free: } /* - * shrink_page_list() returns the number of reclaimed pages + * shrink_page_list() returns the number of reclaimed pages. + * + * If laundry is specified then dirty pages are put onto the + * laundry list and no writes are triggered. */ static unsigned long shrink_page_list(struct list_head *page_list, - struct scan_control *sc) + struct scan_control *sc, struct list_head *laundry) { LIST_HEAD(ret_pages); struct pagevec freed_pvec; int pgactivate = 0; unsigned long nr_reclaimed = 0; + if (list_empty(page_list)) + return 0; + cond_resched(); pagevec_init(&freed_pvec, 1); @@ -407,10 +413,11 @@ static unsigned long shrink_page_list(st if (TestSetPageLocked(page)) goto keep; - VM_BUG_ON(PageActive(page)); - sc->nr_scanned++; + if (PageActive(page)) + goto keep_locked; + if (!sc->may_swap && page_mapped(page)) goto keep_locked; @@ -506,6 +513,12 @@ static unsigned long shrink_page_list(st if (!may_write_to_queue(mapping->backing_dev_info)) goto keep_locked; + if (laundry) { + list_add(&page->lru, laundry); + unlock_page(page); + continue; + } + /* Page is dirty, try to write it out here */ switch(pageout(page, mapping)) { case PAGE_ACTIVATE: @@ -817,7 +830,7 @@ static unsigned long shrink_inactive_lis spin_unlock_irq(&zone->lru_lock); nr_scanned += nr_scan; - nr_freed = shrink_page_list(&page_list, sc); + nr_freed = shrink_page_list(&page_list, sc, NULL); nr_reclaimed += nr_freed; local_irq_disable(); if (current_is_kswapd()) { -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/