summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2016-04-26 13:51:58 +0200
committerJens Axboe <axboe@fb.com>2016-05-02 17:09:23 +0200
commit92911a55d42084cd285250c275d9f238783638c2 (patch)
tree57a8e413100b35efae3fe64fcf1a752c9d36776c /drivers
parentnvme: introduce a controller state machine (diff)
downloadlinux-92911a55d42084cd285250c275d9f238783638c2.tar.xz
linux-92911a55d42084cd285250c275d9f238783638c2.zip
nvme: tighten up state check for namespace scanning
We only should be scanning namespaces if the controller is live. Currently we call the function just before setting it live, so fix the code up to move the call to nvme_queue_scan to just below the state change. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Acked-by Jon Derrick: <jonathan.derrick@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/nvme/host/pci.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 0cee23651aa7..9b2deba0bc91 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -272,7 +272,7 @@ static void nvme_queue_scan(struct nvme_dev *dev)
* Do not queue new scan work when a controller is reset during
* removal.
*/
- if (dev->ctrl.state != NVME_CTRL_DELETING)
+ if (dev->ctrl.state == NVME_CTRL_LIVE)
queue_work(nvme_workq, &dev->scan_work);
}
@@ -1659,7 +1659,6 @@ static int nvme_dev_add(struct nvme_dev *dev)
nvme_free_queues(dev, dev->online_queues);
}
- nvme_queue_scan(dev);
return 0;
}
@@ -1893,6 +1892,9 @@ static void nvme_reset_work(struct work_struct *work)
dev_warn(dev->ctrl.device, "failed to mark controller live\n");
goto out;
}
+
+ if (dev->online_queues > 1)
+ nvme_queue_scan(dev);
return;
out: