lkml.org 
[lkml]   [2018]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 49/73] nvme: make sure ns head inherits underlying device limits
    Date
    From: Sagi Grimberg <sagi@grimberg.me>

    [ Upstream commit 8f676b8508c250bbe255096522fdefb73f1ea0b9 ]

    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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/nvme/host/core.c | 4 +++-
    drivers/nvme/host/multipath.c | 1 +
    2 files changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
    index 6bb9908bf46f..0ba301f7e8b4 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)
    if (ns->ndev)
    nvme_nvm_update_nvm_info(ns);
    #ifdef CONFIG_NVME_MULTIPATH
    - if (ns->head->disk)
    + if (ns->head->disk) {
    nvme_update_disk_info(ns->head->disk, ns, id);
    + blk_queue_stack_limits(ns->head->disk->queue, ns->queue);
    + }
    #endif
    }

    diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
    index 9fe3fff818b8..0b1dfcbd4631 100644
    --- a/drivers/nvme/host/multipath.c
    +++ b/drivers/nvme/host/multipath.c
    @@ -250,6 +250,7 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)
    blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
    /* set to a default value for 512 until disk is validated */
    blk_queue_logical_block_size(q, 512);
    + blk_set_stacking_limits(&q->limits);

    /* we need to propagate up the VMC settings */
    if (ctrl->vwc & NVME_CTRL_VWC_PRESENT)
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-11-14 23:42    [W:4.197 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site