[PATCH V2] nvme: Add support for ACRE Command Interrupted status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I’ve rebased this patch onto nvme-5.5 and removed the NVME_SC_CMD_INTERRUPTED definition.

johnm@johnm-mac-1:nvme(fix_acre) > git logl -2 
* b77e5bbd8847 2019-11-27  (HEAD -> fix_acre) nvme: Add support for ACRE Command Interrupted status [ John Meneghini / johnm@xxxxxxxxxx ]
* 6c6aa2f26c68 2019-11-22  (origin/nvme-5.5, nvme-5.5) nvme: hwmon: add quirk to avoid changing temperature threshold [ Keith Busch / akinobu.mita@xxxxxxxxx ]

And I've replaced BLK_STS_RESOURCE with BLK_STS_DEV_RESOURCE.  This should make it clear to the block layer that this is not a kernel resource problem,
but a device resource problem.  But the block layer should only see this error when the controller runs out of request retries.

johnm@johnm-mac-1:nvme(fix_acre) > cat 0001-nvme-Add-support-for-ACRE-Command-Interrupted-status.patch
>From 8cff18fe2f52477bfa693ee89d374e689a47a79f Mon Sep 17 00:00:00 2001
From: John Meneghini <johnm@xxxxxxxxxx>
Date: Wed, 27 Nov 2019 13:27:35 -0500
Subject: [PATCH] nvme: Add support for ACRE Command Interrupted status

 - Fixes bug in nvme_complete_rq logic introduced by
   Enhanced Command Retry code. According to TP-4033
   when ACRE is enabled the host needs to support
   the Command Interrupted status.
 - The current code interprets Command Interrupted status
   as a BLK_STS_IOERR. This results in a controller reset
   when REQ_NVME_MPATH is set; in nvme_failover_req.

Fixes: 49cd84b6f8b677e ("nvme: implement Enhanced Command Retry")
Signed-off-by: John Meneghini <johnm@xxxxxxxxxx>
Signed-off-by: Hannes Reinecke <hare@xxxxxxx>
---
 drivers/nvme/host/core.c  | 2 ++
 include/linux/blk_types.h | 1 +
 2 files changed, 3 insertions(+)

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 9696404a6182..24dc9ed1a11b 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -230,6 +230,8 @@ static blk_status_t nvme_error_status(u16 status)
                return BLK_STS_NEXUS;
        case NVME_SC_HOST_PATH_ERROR:
                return BLK_STS_TRANSPORT;
+       case NVME_SC_CMD_INTERRUPTED:
+               return BLK_STS_DEV_RESOURCE;
        default:
                return BLK_STS_IOERR;
        }
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index d688b96d1d63..6efee8f1b91b 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -84,6 +84,7 @@ static inline bool blk_path_error(blk_status_t error)
        case BLK_STS_NEXUS:
        case BLK_STS_MEDIUM:
        case BLK_STS_PROTECTION:
+       case BLK_STS_DEV_RESOURCE:
                return false;
        }
 
-- 
2.21.0






[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux