]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
nvme-pci: Fix nvme queue cleanup if IRQ setup fails
authorJianchao Wang <jianchao.w.wang@oracle.com>
Thu, 15 Feb 2018 11:13:41 +0000 (19:13 +0800)
committerBrian Maly <brian.maly@oracle.com>
Mon, 23 Apr 2018 20:17:46 +0000 (16:17 -0400)
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>
(cherry picked from  f25a2dfc20e3a3ed8fe6618c331799dd7bd01190)
Orabug: 27892359

Reviewed-by: Thomas Tai <thomas.tai@oracle.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/nvme/host/pci.c

index 4ab32b3da2fd20540de341f6e6ee89897cbbb841..76f91a96224d695c27684d25e19e7ad79eca75ee 100644 (file)
@@ -1156,7 +1156,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)
@@ -1170,9 +1170,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;
 }