Skip to content

Commit 420efbd

Browse files
committed
rbd: adjust queue limits for "fancy" striping
In order to take full advantage of merging in ceph_file_to_extents(), allow object set sized I/Os. If the layout is not "fancy", an object set consists of just one object. Signed-off-by: Ilya Dryomov <[email protected]>
1 parent c6244b3 commit 420efbd

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

drivers/block/rbd.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3928,7 +3928,8 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
39283928
{
39293929
struct gendisk *disk;
39303930
struct request_queue *q;
3931-
u64 segment_size;
3931+
unsigned int objset_bytes =
3932+
rbd_dev->layout.object_size * rbd_dev->layout.stripe_count;
39323933
int err;
39333934

39343935
/* create gendisk info */
@@ -3968,20 +3969,18 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
39683969
blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
39693970
/* QUEUE_FLAG_ADD_RANDOM is off by default for blk-mq */
39703971

3971-
/* set io sizes to object size */
3972-
segment_size = rbd_obj_bytes(&rbd_dev->header);
3973-
blk_queue_max_hw_sectors(q, segment_size / SECTOR_SIZE);
3972+
blk_queue_max_hw_sectors(q, objset_bytes >> SECTOR_SHIFT);
39743973
q->limits.max_sectors = queue_max_hw_sectors(q);
39753974
blk_queue_max_segments(q, USHRT_MAX);
39763975
blk_queue_max_segment_size(q, UINT_MAX);
3977-
blk_queue_io_min(q, segment_size);
3978-
blk_queue_io_opt(q, segment_size);
3976+
blk_queue_io_min(q, objset_bytes);
3977+
blk_queue_io_opt(q, objset_bytes);
39793978

39803979
/* enable the discard support */
39813980
blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
3982-
q->limits.discard_granularity = segment_size;
3983-
blk_queue_max_discard_sectors(q, segment_size / SECTOR_SIZE);
3984-
blk_queue_max_write_zeroes_sectors(q, segment_size / SECTOR_SIZE);
3981+
q->limits.discard_granularity = objset_bytes;
3982+
blk_queue_max_discard_sectors(q, objset_bytes >> SECTOR_SHIFT);
3983+
blk_queue_max_write_zeroes_sectors(q, objset_bytes >> SECTOR_SHIFT);
39853984

39863985
if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC))
39873986
q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;

0 commit comments

Comments
 (0)