[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