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