[PATCH] NVMe: Skip orderly shutdown on failed devices

Matthew Wilcox willy at linux.intel.com
Wed Jun 25 05:37:17 PDT 2014


On Mon, Jun 23, 2014 at 11:46:35AM -0600, Keith Busch wrote:
> Rather than skipping shutdown only for device's that have been removed,
> skip the orderly shutdown on failed devices to avoid the long timeout
> handling that inevitably happens when deleting queues on such a device.

How about this instead?

@@ -2500,11 +2500,14 @@ static void nvme_dev_list_remove(struct nvme_dev *dev)
 static void nvme_dev_shutdown(struct nvme_dev *dev)
 {
        int i;
+       u32 csts = -1;
 
        dev->initialized = 0;
        nvme_dev_list_remove(dev);
+       if (dev->bar)
+               csts = readl(&dev->bar->csts);
 
-       if (!dev->bar || (dev->bar && readl(&dev->bar->csts) == -1)) {
+       if (csts & NVME_CSTS_CFS) {
                for (i = dev->queue_count - 1; i >= 0; i--) {
                        struct nvme_queue *nvmeq = raw_nvmeq(dev, i);
                        nvme_suspend_queue(nvmeq);




More information about the Linux-nvme mailing list