From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin <sashal@kernel.org>, Judy Brock <judy.brock@samsung.com>, Sagi Grimberg <sagi@grimberg.me>, linux-nvme@lists.infradead.org Subject: [PATCH AUTOSEL 4.19 04/59] nvme: fix possible deadlock when nvme_update_formats fails Date: Sat, 26 Oct 2019 09:18:15 -0400 [thread overview] Message-ID: <20191026131910.3435-4-sashal@kernel.org> (raw) In-Reply-To: <20191026131910.3435-1-sashal@kernel.org> From: Sagi Grimberg <sagi@grimberg.me> [ Upstream commit 6abff1b9f7b8884a46b7bd80b49e7af0b5625aeb ] nvme_update_formats may fail to revalidate the namespace and attempt to remove the namespace. This may lead to a deadlock as nvme_ns_remove will attempt to acquire the subsystem lock which is already acquired by the passthru command with effects. Move the invalid namepsace removal to after the passthru command releases the subsystem lock. Reported-by: Judy Brock <judy.brock@samsung.com> Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Sasha Levin <sashal@kernel.org> --- drivers/nvme/host/core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index ae0b01059fc6d..ddd5c72a565ad 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1201,8 +1201,6 @@ static void nvme_update_formats(struct nvme_ctrl *ctrl) if (ns->disk && nvme_revalidate_disk(ns->disk)) nvme_set_queue_dying(ns); up_read(&ctrl->namespaces_rwsem); - - nvme_remove_invalid_namespaces(ctrl, NVME_NSID_ALL); } static void nvme_passthru_end(struct nvme_ctrl *ctrl, u32 effects) @@ -1218,6 +1216,7 @@ static void nvme_passthru_end(struct nvme_ctrl *ctrl, u32 effects) nvme_unfreeze(ctrl); nvme_mpath_unfreeze(ctrl->subsys); mutex_unlock(&ctrl->subsys->lock); + nvme_remove_invalid_namespaces(ctrl, NVME_NSID_ALL); mutex_unlock(&ctrl->scan_lock); } if (effects & NVME_CMD_EFFECTS_CCC) -- 2.20.1 _______________________________________________ Linux-nvme mailing list Linux-nvme@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-nvme
next parent reply other threads:[~2019-10-26 13:19 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <20191026131910.3435-1-sashal@kernel.org> 2019-10-26 13:18 ` Sasha Levin [this message] 2019-10-26 13:18 ` [PATCH AUTOSEL 4.19 05/59] nvme: retain split access workaround for capability reads Sasha Levin 2019-10-26 13:18 ` [PATCH AUTOSEL 4.19 42/59] nvme-pci: Free tagset if no IO queues Sasha Levin 2019-10-26 13:18 ` [PATCH AUTOSEL 4.19 43/59] nvme: Prevent resets during paused controller state Sasha Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191026131910.3435-4-sashal@kernel.org \ --to=sashal@kernel.org \ --cc=judy.brock@samsung.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=sagi@grimberg.me \ --cc=stable@vger.kernel.org \ --subject='Re: [PATCH AUTOSEL 4.19 04/59] nvme: fix possible deadlock when nvme_update_formats fails' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).