summaryrefslogtreecommitdiffstats
path: root/block/bio.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2014-06-05 13:38:39 -0600
committerJens Axboe <axboe@fb.com>2014-06-05 13:38:39 -0600
commit762380ad9322951cea4ce9d24864265f9c66a916 (patch)
tree9ec3fe551583dcb9243d02a9728511e99216dcdc /block/bio.c
parent046f153343e33dcad1be7f6249ea6ff1c6fd9b58 (diff)
downloadlinux-762380ad9322951cea4ce9d24864265f9c66a916.tar.gz
linux-762380ad9322951cea4ce9d24864265f9c66a916.tar.bz2
linux-762380ad9322951cea4ce9d24864265f9c66a916.zip
block: add notion of a chunk size for request merging
Some drivers have different limits on what size a request should optimally be, depending on the offset of the request. Similar to dividing a device into chunks. Add a setting that allows the driver to inform the block layer of such a chunk size. The block layer will then prevent merging across the chunks. This is needed to optimally support NVMe with a non-zero stripe size. Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/bio.c')
-rw-r--r--block/bio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/block/bio.c b/block/bio.c
index 96d28eee8a1e..97e832cc9b9c 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -849,7 +849,8 @@ int bio_add_page(struct bio *bio, struct page *page, unsigned int len,
unsigned int offset)
{
struct request_queue *q = bdev_get_queue(bio->bi_bdev);
- return __bio_add_page(q, bio, page, len, offset, queue_max_sectors(q));
+
+ return __bio_add_page(q, bio, page, len, offset, blk_max_size_offset(q, bio->bi_iter.bi_sector));
}
EXPORT_SYMBOL(bio_add_page);