rbd: set max_sectors explicitly
authorIlya Dryomov <idryomov@gmail.com>
Wed, 7 Oct 2015 14:09:35 +0000 (16:09 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 16 Oct 2015 14:48:36 +0000 (16:48 +0200)
Commit 30e2bc08b2bb ("Revert "block: remove artifical max_hw_sectors
cap"") restored a clamp on max_sectors.  It's now 2560 sectors instead
of 1024, but it's not good enough: we set max_hw_sectors to rbd object
size because we don't want object sized I/Os to be split, and the
default object size is 4M.

So, set max_sectors to max_hw_sectors in rbd at queue init time.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
drivers/block/rbd.c

index d93a0372b37b5c7b4cb214e7013e64897c3a9aba..2968b0956bed5aca8e9a76f1b106a56d6a3c2ab5 100644 (file)
@@ -3760,6 +3760,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
        /* set io sizes to object size */
        segment_size = rbd_obj_bytes(&rbd_dev->header);
        blk_queue_max_hw_sectors(q, segment_size / SECTOR_SIZE);
+       q->limits.max_sectors = queue_max_hw_sectors(q);
        blk_queue_max_segments(q, segment_size / SECTOR_SIZE);
        blk_queue_max_segment_size(q, segment_size);
        blk_queue_io_min(q, segment_size);