diff options
author | Jens Axboe <axboe@fb.com> | 2014-06-05 13:38:39 -0600 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2014-06-05 13:38:39 -0600 |
commit | 762380ad9322951cea4ce9d24864265f9c66a916 (patch) | |
tree | 9ec3fe551583dcb9243d02a9728511e99216dcdc /block/bio.c | |
parent | 046f153343e33dcad1be7f6249ea6ff1c6fd9b58 (diff) | |
download | linux-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.c | 3 |
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); |