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 <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]