block: Split bios on chunk boundaries
authorKeith Busch <keith.busch@intel.com>
Tue, 22 Dec 2015 22:48:44 +0000 (15:48 -0700)
committerJens Axboe <axboe@fb.com>
Wed, 23 Dec 2015 00:19:25 +0000 (17:19 -0700)
For h/w that advertise their block storage's underlying chunk size, it's
a big performance win to not submit commands that cross them. This patch
uses that criteria if it is provided. If it is not provided, this patch
uses the max sectors as before.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-merge.c

index e01405a3e8b3f51ce0424a844fadb3304bda5e44..e73846a3d08a655a63a763d35732106b64ee4797 100644 (file)
@@ -81,7 +81,7 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
        struct bio *new = NULL;
 
        bio_for_each_segment(bv, bio, iter) {
-               if (sectors + (bv.bv_len >> 9) > queue_max_sectors(q))
+               if (sectors + (bv.bv_len >> 9) > blk_max_size_offset(q, bio->bi_iter.bi_sector))
                        goto split;
 
                /*