[PATCH] NVMe: Skip orderly shutdown on failed devices

Keith Busch keith.busch at intel.com
Wed Jun 25 10:06:56 PDT 2014


On Wed, 25 Jun 2014, Matthew Wilcox wrote:
> 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?

Yes, that's much better.

I also just encountered a device that dropped the ready bit. I'm not
sure why, but the device definitely wasn't ready to do anything, so I
can add the check and skip shutdown there as well.

> @@ -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