From: Jianchao Wang Date: Thu, 15 Feb 2018 11:13:41 +0000 (+0800) Subject: nvme-pci: Fix nvme queue cleanup if IRQ setup fails X-Git-Tag: v4.1.12-124.31.3~851 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2cf9d2a17cf940e35b7f1a30b419ba3b0d40bd11;p=users%2Fjedix%2Flinux-maple.git 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 [changelog updates, removed misc whitespace changes] Signed-off-by: Keith Busch (cherry picked from f25a2dfc20e3a3ed8fe6618c331799dd7bd01190) Orabug: 27892359 Reviewed-by: Thomas Tai Reviewed-by: Martin K. Petersen Signed-off-by: Jianchao Wang Signed-off-by: Brian Maly --- diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 4ab32b3da2fd..76f91a96224d 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -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; }