aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2013-09-05 14:45:07 -0600
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2013-09-06 16:26:58 -0400
commitd82e8bfdef9afae83b894be49af4644d9ac3c359 (patch)
treeb9d26d4e24e5464fe845110ad6bbed44650ded9c /drivers/block
parentNVMe: Handle ioremap failure (diff)
downloadlinux-dev-d82e8bfdef9afae83b894be49af4644d9ac3c359.tar.xz
linux-dev-d82e8bfdef9afae83b894be49af4644d9ac3c359.zip
NVMe: Merge issue on character device bring-up
A recent patch made it possible to bring up the character handle when the device is responsive but not accepting a set-features command. Another recent patch moved the initialization that requires we move where the checks for this condition occur. This patch merges these two ideas so it works much as before. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/nvme-core.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index 9f2b424c445e..da52092980e2 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -2135,10 +2135,10 @@ static int nvme_dev_start(struct nvme_dev *dev)
spin_unlock(&dev_list_lock);
result = nvme_setup_io_queues(dev);
- if (result)
+ if (result && result != -EBUSY)
goto disable;
- return 0;
+ return result;
disable:
spin_lock(&dev_list_lock);
@@ -2177,13 +2177,17 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto release;
result = nvme_dev_start(dev);
- if (result)
+ if (result) {
+ if (result == -EBUSY)
+ goto create_cdev;
goto release_pools;
+ }
result = nvme_dev_add(dev);
- if (result && result != -EBUSY)
+ if (result)
goto shutdown;
+ create_cdev:
scnprintf(dev->name, sizeof(dev->name), "nvme%d", dev->instance);
dev->miscdev.minor = MISC_DYNAMIC_MINOR;
dev->miscdev.parent = &pdev->dev;