mm: don't cap request size based on read-ahead setting read-ahead
authorJens Axboe <axboe@fb.com>
Fri, 18 Nov 2016 19:36:00 +0000 (12:36 -0700)
committerJens Axboe <axboe@fb.com>
Fri, 18 Nov 2016 19:43:31 +0000 (12:43 -0700)
commitf18f9335f0a927414b70fe05fc8a9ec8b3280783
treebef5a0c259b76650fd7dc132d70ea74927ffc125
parentc1717701be2f0639e5f817385a524131dbd3ff38
mm: don't cap request size based on read-ahead setting

We ran into a funky issue, where someone doing 256K buffered reads saw
128K requests at the device level. Turns out it is read-ahead capping
the request size, since we use 128K as the default setting. This doesn't
make a lot of sense - if someone is issuing 256K reads, they should see
256K reads, regardless of the read-ahead setting, if the underlying
device can support a 256K read in a single command.

This patch introduces a bdi hint, io_pages. This is the soft max IO size
for the lower level, I've hooked it up to the bdev settings here.
Read-ahead is modified to issue the maximum of the user request size,
and the read-ahead max size, but capped to the max request size on the
device side. The latter is done to avoid reading ahead too much, if the
application asks for a huge read. With this patch, the kernel behaves
like the application expects.

Signed-off-by: Jens Axboe <axboe@fb.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
block/blk-settings.c
block/blk-sysfs.c
include/linux/backing-dev-defs.h
mm/readahead.c