lkml.org 
[lkml]   [2019]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 005/197] nvme-pci: Fix a race in controller removal
    Date
    From: Balbir Singh <sblbir@amzn.com>

    [ Upstream commit b224726de5e496dbf78147a66755c3d81e28bdd2 ]

    User space programs like udevd may try to read to partitions at the
    same time the driver detects a namespace is unusable, and may deadlock
    if revalidate_disk() is called while such a process is waiting to
    enter the frozen queue. On detecting a dead namespace, move the disk
    revalidate after unblocking dispatchers that may be holding bd_butex.

    changelog Suggested-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Balbir Singh <sblbir@amzn.com>
    Reviewed-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/nvme/host/core.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
    index d3d6b7bd69033..28217cee5e762 100644
    --- a/drivers/nvme/host/core.c
    +++ b/drivers/nvme/host/core.c
    @@ -103,10 +103,13 @@ static void nvme_set_queue_dying(struct nvme_ns *ns)
    */
    if (!ns->disk || test_and_set_bit(NVME_NS_DEAD, &ns->flags))
    return;
    - revalidate_disk(ns->disk);
    blk_set_queue_dying(ns->queue);
    /* Forcibly unquiesce queues to avoid blocking dispatch */
    blk_mq_unquiesce_queue(ns->queue);
    + /*
    + * Revalidate after unblocking dispatchers that may be holding bd_butex
    + */
    + revalidate_disk(ns->disk);
    }

    static void nvme_queue_scan(struct nvme_ctrl *ctrl)
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-10-27 22:31    [W:4.463 / U:0.552 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site