Convert wbc.range_cyclic to new behavior: when past EOF, abort writeback of the inode, which instructs writeback_single_inode() to delay it for a while if necessary. It removes one inefficient .range_cyclic IO pattern when writeback_index wraps: submit [10000-10100], (wrap), submit [0-100] In which the submitted pages may be consisted of two distant ranges. It also prevents submitting pointless IO for busy overwriters. CC: Chris Mason <chris.mason@xxxxxxxxxx> Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx> --- fs/btrfs/extent_io.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) --- linux.orig/fs/btrfs/extent_io.c 2009-10-06 23:37:49.000000000 +0800 +++ linux/fs/btrfs/extent_io.c 2009-10-06 23:38:32.000000000 +0800 @@ -2402,10 +2402,9 @@ static int extent_write_cache_pages(stru int done = 0; int nr_to_write_done = 0; struct pagevec pvec; - int nr_pages; + int nr_pages = 1; pgoff_t index; pgoff_t end; /* Inclusive */ - int scanned = 0; int range_whole = 0; pagevec_init(&pvec, 0); @@ -2417,16 +2416,14 @@ static int extent_write_cache_pages(stru end = wbc->range_end >> PAGE_CACHE_SHIFT; if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) range_whole = 1; - scanned = 1; } -retry: + while (!done && !nr_to_write_done && (index <= end) && (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY, min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1))) { unsigned i; - scanned = 1; for (i = 0; i < nr_pages; i++) { struct page *page = pvec.pages[i]; @@ -2447,7 +2444,7 @@ retry: continue; } - if (!wbc->range_cyclic && page->index > end) { + if (page->index > end) { done = 1; unlock_page(page); continue; @@ -2484,15 +2481,9 @@ retry: pagevec_release(&pvec); cond_resched(); } - if (!scanned && !done) { - /* - * We hit the last page and there is more work to be done: wrap - * back to the start of the file - */ - scanned = 1; - index = 0; - goto retry; - } + if (!nr_pages) + mapping->writeback_index = 0; + return ret; } -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html