aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/nvme
diff options
context:
space:
mode:
authorKeith Busch <kbusch@kernel.org>2020-08-26 10:53:04 -0700
committerSagi Grimberg <sagi@grimberg.me>2020-08-28 16:43:57 -0700
commit192f6c29bb28bfd0a17e6ad331d09f1ec84143d0 (patch)
treef3e67ba8d3dbb4d0a60ea54bc6956165a90ed7cd /drivers/nvme
parentnvmet-fc: Fix a missed _irqsave version of spin_lock in 'nvmet_fc_fod_op_done()' (diff)
downloadwireguard-linux-192f6c29bb28bfd0a17e6ad331d09f1ec84143d0.tar.xz
wireguard-linux-192f6c29bb28bfd0a17e6ad331d09f1ec84143d0.zip
nvme: fix controller instance leak
If the driver has to unbind from the controller for an early failure before the subsystem has been set up, there won't be a subsystem holding the controller's instance, so the controller needs to free its own instance in this case. Fixes: 733e4b69d508d ("nvme: Assign subsys instance from first ctrl") Signed-off-by: Keith Busch <kbusch@kernel.org> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Diffstat (limited to 'drivers/nvme')
-rw-r--r--drivers/nvme/host/core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index e406c3cf55bc..d6186208abf9 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -4394,7 +4394,7 @@ static void nvme_free_ctrl(struct device *dev)
struct nvme_subsystem *subsys = ctrl->subsys;
struct nvme_cel *cel, *next;
- if (subsys && ctrl->instance != subsys->instance)
+ if (!subsys || ctrl->instance != subsys->instance)
ida_simple_remove(&nvme_instance_ida, ctrl->instance);
list_for_each_entry_safe(cel, next, &ctrl->cels, entry) {