diff options
author | Keith Busch <keith.busch@intel.com> | 2016-02-11 13:05:43 -0700 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-02-12 08:10:16 -0700 |
commit | ff23a2a15a2117245b4599c1352343c8b8fb4c43 (patch) | |
tree | 9b45c0213b12cd779ab94d3e486283a401221644 /drivers/nvme | |
parent | ae1fba20015bca7401db2422fe18c9c049184163 (diff) | |
download | op-kernel-dev-ff23a2a15a2117245b4599c1352343c8b8fb4c43.zip op-kernel-dev-ff23a2a15a2117245b4599c1352343c8b8fb4c43.tar.gz |
NVMe: Poll device while still active during remove
A device failure or link down wouldn't have been detected during namespace
removal. This patch keeps the device in the list for polling so that the
thread may see such failure and initiate a reset. The device is removed
from the list after disable, so we can safely flush the reset work as
it can't be requeued when disable completes.
Signed-off-by: Keith Busch <keith.busch@intel.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/nvme')
-rw-r--r-- | drivers/nvme/host/pci.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index e5c2bea..09cc4da 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -2116,16 +2116,12 @@ static void nvme_remove(struct pci_dev *pdev) { struct nvme_dev *dev = pci_get_drvdata(pdev); - spin_lock(&dev_list_lock); - list_del_init(&dev->node); - spin_unlock(&dev_list_lock); - pci_set_drvdata(pdev, NULL); - flush_work(&dev->reset_work); flush_work(&dev->scan_work); nvme_remove_namespaces(&dev->ctrl); nvme_uninit_ctrl(&dev->ctrl); nvme_dev_disable(dev, true); + flush_work(&dev->reset_work); nvme_dev_remove_admin(dev); nvme_free_queues(dev, 0); nvme_release_cmb(dev); |