diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2017-12-21 15:35:11 +0100 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2018-01-09 17:40:48 +0100 |
commit | 21acdf45f4958135940f0b4767185cf911d4b010 (patch) | |
tree | 237bd2ed3d14ea13bef18f86874023c0c23893cc /drivers/block | |
parent | edd8ca8015800b354453b891d38960f3a474b7e4 (diff) | |
download | op-kernel-dev-21acdf45f4958135940f0b4767185cf911d4b010.zip op-kernel-dev-21acdf45f4958135940f0b4767185cf911d4b010.tar.gz |
rbd: set max_segments to USHRT_MAX
Commit d3834fefcfe5 ("rbd: bump queue_max_segments") bumped
max_segments (unsigned short) to max_hw_sectors (unsigned int).
max_hw_sectors is set to the number of 512-byte sectors in an object
and overflows unsigned short for 32M (largest possible) objects, making
the block layer resort to handing us single segment (i.e. single page
or even smaller) bios in that case.
Cc: stable@vger.kernel.org
Fixes: d3834fefcfe5 ("rbd: bump queue_max_segments")
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/rbd.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index aacae6f..cc93522 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -4387,7 +4387,7 @@ static int rbd_init_disk(struct rbd_device *rbd_dev) 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_segments(q, USHRT_MAX); blk_queue_max_segment_size(q, segment_size); blk_queue_io_min(q, segment_size); blk_queue_io_opt(q, segment_size); |