aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagi Grimberg <sagi@grimberg.me>2018-11-02 14:22:13 -0400
committerJens Axboe <axboe@kernel.dk>2018-11-09 08:14:47 -0500
commit8f676b8508c250bbe255096522fdefb73f1ea0b9 (patch)
tree4de2434de7617e53fe8b333d47997b6cb6ad7a09
parent21d3bbdd4c342f16eac8d70893e45cdfa3381a1e (diff)
nvme: make sure ns head inherits underlying device limits
Whenever we update ns_head info, we need to make sure it is still compatible with all underlying backing devices because although nvme multipath doesn't have any explicit use of these limits, other devices can still be stacked on top of it which may rely on the underlying limits. Start with unlimited stacking limits, and every info update iterate over siblings and adjust queue limits. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/nvme/host/core.c4
-rw-r--r--drivers/nvme/host/multipath.c1
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 2e65be8b1387..559d567693b8 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1519,8 +1519,10 @@ static void __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id)
1519 if (ns->ndev) 1519 if (ns->ndev)
1520 nvme_nvm_update_nvm_info(ns); 1520 nvme_nvm_update_nvm_info(ns);
1521#ifdef CONFIG_NVME_MULTIPATH 1521#ifdef CONFIG_NVME_MULTIPATH
1522 if (ns->head->disk) 1522 if (ns->head->disk) {
1523 nvme_update_disk_info(ns->head->disk, ns, id); 1523 nvme_update_disk_info(ns->head->disk, ns, id);
1524 blk_queue_stack_limits(ns->head->disk->queue, ns->queue);
1525 }
1524#endif 1526#endif
1525} 1527}
1526 1528
diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index 5e3cc8c59a39..9901afd804ce 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -285,6 +285,7 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)
285 blk_queue_flag_set(QUEUE_FLAG_NONROT, q); 285 blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
286 /* set to a default value for 512 until disk is validated */ 286 /* set to a default value for 512 until disk is validated */
287 blk_queue_logical_block_size(q, 512); 287 blk_queue_logical_block_size(q, 512);
288 blk_set_stacking_limits(&q->limits);
288 289
289 /* we need to propagate up the VMC settings */ 290 /* we need to propagate up the VMC settings */
290 if (ctrl->vwc & NVME_CTRL_VWC_PRESENT) 291 if (ctrl->vwc & NVME_CTRL_VWC_PRESENT)