Commit 081f5e75 authored by Keith Busch's avatar Keith Busch Committed by Christoph Hellwig
Browse files

nvme-pci: fix freeze accounting for error handling



A reset on a live device experiencing a link error still needs to have
the queue freeze state started for the subsequent reinitialization. Skip
only the register read if the device is not present instead of bypassing
the freeze checks.

Fixes: b98235d3 ("nvme-pci: harden drive presence detect in nvme_dev_disable()")
Reported-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
Tested-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 6b0de7d0
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -2690,8 +2690,13 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown)
	struct pci_dev *pdev = to_pci_dev(dev->dev);

	mutex_lock(&dev->shutdown_lock);
	if (pci_device_is_present(pdev) && pci_is_enabled(pdev)) {
		u32 csts = readl(dev->bar + NVME_REG_CSTS);
	if (pci_is_enabled(pdev)) {
		u32 csts;

		if (pci_device_is_present(pdev))
			csts = readl(dev->bar + NVME_REG_CSTS);
		else
			csts = ~0;

		if (dev->ctrl.state == NVME_CTRL_LIVE ||
		    dev->ctrl.state == NVME_CTRL_RESETTING) {