summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew.r.wilcox@intel.com>2013-04-16 11:22:36 -0400
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2013-04-16 15:13:41 -0400
commit422ef0c7c81934c3344e1623d2dcfda5fa2fab8d (patch)
treeba37240a322d81044a396e32e98bec9fcc534f9f
parent063cc6d5591ea9c0631b81ac5c7b829d99738b2f (diff)
NVMe: Don't fail initialisation unnecessarily
The nvme_dev_add() function currently returns the last error code that it saw, which (if everything else succeeds) happens to be the result of an optional command, so it can legitimately fail. Looking at the error path more closely reveals that we should return success from this function, even if no device namespaces are added. So once the queues are created and the device has responded to Identify, make sure that this function succeeds. Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com> Acked-by: Keith Busch <keith.busch@intel.com>
-rw-r--r--drivers/block/nvme-core.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index f3ea52aa3e5..357c961151a 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -1502,6 +1502,12 @@ static void nvme_free_queues(struct nvme_dev *dev)
nvme_free_queue(dev, i);
}
+/*
+ * Return: error value if an error occurred setting up the queues or calling
+ * Identify Device. 0 if these succeeded, even if adding some of the
+ * namespaces failed. At the moment, these failures are silent. TBD which
+ * failures should be reported.
+ */
static int nvme_dev_add(struct nvme_dev *dev)
{
int res, nn, i;
@@ -1555,7 +1561,7 @@ static int nvme_dev_add(struct nvme_dev *dev)
}
list_for_each_entry(ns, &dev->namespaces, list)
add_disk(ns->disk);
-
+ res = 0;
goto out;
out_free: