diff options
| -rw-r--r-- | drivers/block/rbd.c | 17 |
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; |
