diff options
author | Jeff Lien <jeff.lien@wdc.com> | 2017-12-19 14:24:15 -0500 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2017-12-29 04:31:05 -0500 |
commit | cee160fd34b459ace029653436319557a643795a (patch) | |
tree | 74fb334a13d4464cdb40a31f181220183b316bfd | |
parent | 955b1b5a00ba694159a7d3763412597f707c294d (diff) |
nvme: fix sector units when going between formats
If you format a device with a 4k sector size back to 512 bytes, the queue
limit values for physical block size and minimum IO size were not getting
updated; only the logical block size was being updated. This patch adds
code to update the physical block and IO minimum sizes.
Signed-off-by: Jeff Lien <jeff.lien@wdc.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r-- | drivers/nvme/host/core.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 1e46e60b8f10..961d6a4af19c 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c | |||
@@ -1335,6 +1335,7 @@ static void nvme_update_disk_info(struct gendisk *disk, | |||
1335 | struct nvme_ns *ns, struct nvme_id_ns *id) | 1335 | struct nvme_ns *ns, struct nvme_id_ns *id) |
1336 | { | 1336 | { |
1337 | sector_t capacity = le64_to_cpup(&id->nsze) << (ns->lba_shift - 9); | 1337 | sector_t capacity = le64_to_cpup(&id->nsze) << (ns->lba_shift - 9); |
1338 | unsigned short bs = 1 << ns->lba_shift; | ||
1338 | unsigned stream_alignment = 0; | 1339 | unsigned stream_alignment = 0; |
1339 | 1340 | ||
1340 | if (ns->ctrl->nr_streams && ns->sws && ns->sgs) | 1341 | if (ns->ctrl->nr_streams && ns->sws && ns->sgs) |
@@ -1343,7 +1344,10 @@ static void nvme_update_disk_info(struct gendisk *disk, | |||
1343 | blk_mq_freeze_queue(disk->queue); | 1344 | blk_mq_freeze_queue(disk->queue); |
1344 | blk_integrity_unregister(disk); | 1345 | blk_integrity_unregister(disk); |
1345 | 1346 | ||
1346 | blk_queue_logical_block_size(disk->queue, 1 << ns->lba_shift); | 1347 | blk_queue_logical_block_size(disk->queue, bs); |
1348 | blk_queue_physical_block_size(disk->queue, bs); | ||
1349 | blk_queue_io_min(disk->queue, bs); | ||
1350 | |||
1347 | if (ns->ms && !ns->ext && | 1351 | if (ns->ms && !ns->ext && |
1348 | (ns->ctrl->ops->flags & NVME_F_METADATA_SUPPORTED)) | 1352 | (ns->ctrl->ops->flags & NVME_F_METADATA_SUPPORTED)) |
1349 | nvme_init_integrity(disk, ns->ms, ns->pi_type); | 1353 | nvme_init_integrity(disk, ns->ms, ns->pi_type); |