summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJianchao Wang <jianchao.w.wang@oracle.com>2018-02-15 12:13:41 +0100
committerKeith Busch <keith.busch@intel.com>2018-02-26 09:53:32 +0100
commitf25a2dfc20e3a3ed8fe6618c331799dd7bd01190 (patch)
tree8f1ec7dafde15c0ca07915c75751c5e19ee7d26b /drivers
parentnvmet-loop: use blk_rq_payload_bytes for sgl selection (diff)
downloadlinux-f25a2dfc20e3a3ed8fe6618c331799dd7bd01190.tar.xz
linux-f25a2dfc20e3a3ed8fe6618c331799dd7bd01190.zip
nvme-pci: Fix nvme queue cleanup if IRQ setup fails
This patch fixes nvme queue cleanup if requesting an IRQ handler for the queue's vector fails. It does this by resetting the cq_vector to the uninitialized value of -1 so it is ignored for a controller reset. Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com> [changelog updates, removed misc whitespace changes] Signed-off-by: Keith Busch <keith.busch@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/nvme/host/pci.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 6fe7af00a1f4..022b070e60b7 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -1452,7 +1452,7 @@ static int nvme_create_queue(struct nvme_queue *nvmeq, int qid)
nvmeq->cq_vector = qid - 1;
result = adapter_alloc_cq(dev, qid, nvmeq);
if (result < 0)
- return result;
+ goto release_vector;
result = adapter_alloc_sq(dev, qid, nvmeq);
if (result < 0)
@@ -1466,9 +1466,12 @@ static int nvme_create_queue(struct nvme_queue *nvmeq, int qid)
return result;
release_sq:
+ dev->online_queues--;
adapter_delete_sq(dev, qid);
release_cq:
adapter_delete_cq(dev, qid);
+ release_vector:
+ nvmeq->cq_vector = -1;
return result;
}