Commit 0b5e3dbf authored by Ilya Dryomov's avatar Ilya Dryomov Committed by Greg Kroah-Hartman

rbd: set max_segments to USHRT_MAX

commit 21acdf45 upstream.

Commit d3834fef ("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.

Fixes: d3834fef ("rbd: bump queue_max_segments")
Signed-off-by: default avatarIlya Dryomov <>
Reviewed-by: default avatarAlex Elder <>
Signed-off-by: default avatarGreg Kroah-Hartman <>
parent e068cdee
......@@ -4421,7 +4421,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);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment