[PATCH 5/5] vmscan: transfer async file writeback to the flusher

Wu Fengguang
2010-07-29T11:51:47Z

[-- Attachment #1: vmscan-writeback-inode-page.patch --]
[-- Type: text/plain, Size: 1349 bytes --]

This relays all ASYNC file writeback IOs to the flusher threads.
The lesser SYNC pageout()s will work as before (as a last resort).

It's a minimal prototype implementation and barely runs without panic.
It potentially requires lots of more work to go stable.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
mm/vmscan.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

--- linux-next.orig/mm/vmscan.c 2010-07-29 17:07:07.000000000 +0800
+++ linux-next/mm/vmscan.c 2010-07-29 17:09:16.000000000 +0800
@@ -379,6 +379,13 @@ static pageout_t pageout(struct page *pa
}
if (mapping->a_ops->writepage == NULL)
return PAGE_ACTIVATE;
+
+ if (sync_writeback == PAGEOUT_IO_ASYNC &&
+ page_is_file_cache(page)) {
+ bdi_start_inode_writeback(mapping->host, page->index);
+ return PAGE_KEEP;
+ }
+
if (!may_write_to_queue(mapping->backing_dev_info))
return PAGE_KEEP;

@@ -1366,7 +1373,6 @@ shrink_inactive_list(unsigned long nr_to
list_add(&page->lru, &putback_list);
}

- wakeup_flusher_threads(laptop_mode ? 0 : nr_dirty);
congestion_wait(BLK_RW_ASYNC, HZ/10);

/*