do_mpage_readpage: don't submit lots of small bios on boundary
PATCH 1/1 do_mpage_readpage: don't submit lots of small bios on boundary
(not really sure who to put in the Cc list here)
While tracing I/O patterns with blktrace (a great tool) a few weeks ago I identified a minor issue in fs/mpage.c
[PATCH] do_mpage_readpage: don't submit lots of small bios on boundary
As the comment above mpage_readpages() says, a fs's get_block function will set BH_Boundary when it maps a block just before a block for which extra I/O is required.
Since get_block() can map a range of pages, for all these pages the BH_Boundary flag will be set. But we only need to push what I/O we have accumulated at the last block of this range.
This makes do_mpage_readpage() send out the largest possible bio instead of a bunch of page-sized ones in the BH_Boundary case.
fs/mpage.c +4 -1
@@ -307,7 +307,10 @@ goto alloc_new; } -if (buffer_boundary (map_bh) || (first_hole != blocks_per_page)) + relative_block = block_in_file - *first_logical_block; + nblocks = map_bh->b_size >> blkbits; +if ((buffer_boundary (map_bh) && relative_block == nblocks) || + (first_hole != blocks_per_page)) bio =mpage_bio_submit (READ , bio);else *last_block_in_bio = blocks[blocks_per_page -1 ];