aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/rbd.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index e40e490ff967..6a1805858b79 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3928,7 +3928,8 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
3928{ 3928{
3929 struct gendisk *disk; 3929 struct gendisk *disk;
3930 struct request_queue *q; 3930 struct request_queue *q;
3931 u64 segment_size; 3931 unsigned int objset_bytes =
3932 rbd_dev->layout.object_size * rbd_dev->layout.stripe_count;
3932 int err; 3933 int err;
3933 3934
3934 /* create gendisk info */ 3935 /* create gendisk info */
@@ -3968,20 +3969,18 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
3968 blk_queue_flag_set(QUEUE_FLAG_NONROT, q); 3969 blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
3969 /* QUEUE_FLAG_ADD_RANDOM is off by default for blk-mq */ 3970 /* QUEUE_FLAG_ADD_RANDOM is off by default for blk-mq */
3970 3971
3971 /* set io sizes to object size */ 3972 blk_queue_max_hw_sectors(q, objset_bytes >> SECTOR_SHIFT);
3972 segment_size = rbd_obj_bytes(&rbd_dev->header);
3973 blk_queue_max_hw_sectors(q, segment_size / SECTOR_SIZE);
3974 q->limits.max_sectors = queue_max_hw_sectors(q); 3973 q->limits.max_sectors = queue_max_hw_sectors(q);
3975 blk_queue_max_segments(q, USHRT_MAX); 3974 blk_queue_max_segments(q, USHRT_MAX);
3976 blk_queue_max_segment_size(q, UINT_MAX); 3975 blk_queue_max_segment_size(q, UINT_MAX);
3977 blk_queue_io_min(q, segment_size); 3976 blk_queue_io_min(q, objset_bytes);
3978 blk_queue_io_opt(q, segment_size); 3977 blk_queue_io_opt(q, objset_bytes);
3979 3978
3980 /* enable the discard support */ 3979 /* enable the discard support */
3981 blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); 3980 blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
3982 q->limits.discard_granularity = segment_size; 3981 q->limits.discard_granularity = objset_bytes;
3983 blk_queue_max_discard_sectors(q, segment_size / SECTOR_SIZE); 3982 blk_queue_max_discard_sectors(q, objset_bytes >> SECTOR_SHIFT);
3984 blk_queue_max_write_zeroes_sectors(q, segment_size / SECTOR_SIZE); 3983 blk_queue_max_write_zeroes_sectors(q, objset_bytes >> SECTOR_SHIFT);
3985 3984
3986 if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC)) 3985 if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC))
3987 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; 3986 q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;