aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/nvme-core.c
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2013-05-01 15:07:51 -0400
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2013-05-02 14:33:53 -0400
commit025c557a71bd06a9f6d32259f00e2218b15bf0a4 (patch)
tree06ed292f4b314481699535164b5066a74a5f7511 /drivers/block/nvme-core.c
parentec5037335064dcc52c2fbbf3d505bae0eb27e713 (diff)
NVMe: Free admin queue on request_irq error
Fixes a potential memory leak if requesting the admin queue irq fails. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
Diffstat (limited to 'drivers/block/nvme-core.c')
-rw-r--r--drivers/block/nvme-core.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index 358d17700c20..391a874e4133 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -1054,14 +1054,19 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
1054 } 1054 }
1055 } 1055 }
1056 1056
1057 if (result) { 1057 if (result)
1058 nvme_free_queue_mem(nvmeq); 1058 goto free_q;
1059 return result;
1060 }
1061 1059
1062 result = queue_request_irq(dev, nvmeq, "nvme admin"); 1060 result = queue_request_irq(dev, nvmeq, "nvme admin");
1061 if (result)
1062 goto free_q;
1063
1063 dev->queues[0] = nvmeq; 1064 dev->queues[0] = nvmeq;
1064 return result; 1065 return result;
1066
1067 free_q:
1068 nvme_free_queue_mem(nvmeq);
1069 return result;
1065} 1070}
1066 1071
1067struct nvme_iod *nvme_map_user_pages(struct nvme_dev *dev, int write, 1072struct nvme_iod *nvme_map_user_pages(struct nvme_dev *dev, int write,