aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2015-06-18 15:36:40 -0400
committerJens Axboe <axboe@fb.com>2015-06-27 13:42:54 -0400
commit3399a3f7464a624db1b365dbce0fef0ef4636c05 (patch)
tree33d1342c9d2639948baeb9cabb22009e6a663612
parentde3eff2bad56f0a29d3915105223d368f2bbc94e (diff)
NVMe: Fix filesystem deadlock on removal
Move gendisk deletion before controller shutdown so filesystem may sync dirty pages. Before, this would deadlock trying to allocate requests on frozen queues that are about to be deleted. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/block/nvme-core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index 22761a6c34aa..75a914914c41 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -3124,8 +3124,8 @@ static void nvme_remove(struct pci_dev *pdev)
3124 flush_work(&dev->reset_work); 3124 flush_work(&dev->reset_work);
3125 flush_work(&dev->scan_work); 3125 flush_work(&dev->scan_work);
3126 device_remove_file(dev->device, &dev_attr_reset_controller); 3126 device_remove_file(dev->device, &dev_attr_reset_controller);
3127 nvme_dev_shutdown(dev);
3128 nvme_dev_remove(dev); 3127 nvme_dev_remove(dev);
3128 nvme_dev_shutdown(dev);
3129 nvme_dev_remove_admin(dev); 3129 nvme_dev_remove_admin(dev);
3130 device_destroy(nvme_class, MKDEV(nvme_char_major, dev->instance)); 3130 device_destroy(nvme_class, MKDEV(nvme_char_major, dev->instance));
3131 nvme_free_queues(dev, 0); 3131 nvme_free_queues(dev, 0);