do_mpage_readpage(): don't submit lots of small bios on boundary
authorMiquel van Smoorenburg <mikevs@xs4all.net>
Tue, 6 Jan 2009 22:39:02 +0000 (14:39 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 6 Jan 2009 23:58:59 +0000 (15:58 -0800)
commit38c8e6180939e5619140b2e9e479cb26029ff8b1
tree1980f3dadfa02ac6c1fc2ad7236205af54f7972a
parent75aa199410359dc5fbcf9025ff7af98a9d20f0d5
do_mpage_readpage(): don't submit lots of small bios on boundary

While tracing I/O patterns with blktrace (a great tool) a few weeks ago I
identified a minor issue in fs/mpage.c

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.

Signed-off-by: Miquel van Smoorenburg <mikevs@xs4all.net>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/mpage.c