[PATCH v2 1/4] nvme: return BLK_STS_DO_NOT_RETRY if the DNR bit is set
Hannes Reinecke
hare at suse.de
Fri Apr 16 14:51:33 BST 2021
On 4/16/21 1:15 AM, Mike Snitzer wrote:
> If the DNR bit is set we should not retry the command.
>
> We care about the retryable vs not retryable distinction at the block
> layer so propagate the equivalent of the DNR bit by introducing
> BLK_STS_DO_NOT_RETRY. Update blk_path_error() to _not_ retry if it
> is set.
>
> This change runs with the suggestion made here:
> https://lore.kernel.org/linux-nvme/20190813170144.GA10269@lst.de/
>
> Suggested-by: Christoph Hellwig <hch at lst.de>
> Signed-off-by: Mike Snitzer <snitzer at redhat.com>
> ---
> drivers/nvme/host/core.c | 3 +++
> include/linux/blk_types.h | 8 ++++++++
> 2 files changed, 11 insertions(+)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 0896e21642be..540d6fd8ffef 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -237,6 +237,9 @@ static void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl)
>
> static blk_status_t nvme_error_status(u16 status)
> {
> + if (unlikely(status & NVME_SC_DNR))
> + return BLK_STS_DO_NOT_RETRY;
> +
> switch (status & 0x7ff) {
> case NVME_SC_SUCCESS:
> return BLK_STS_OK;
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index db026b6ec15a..1ca724948c56 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -142,6 +142,13 @@ typedef u8 __bitwise blk_status_t;
> */
> #define BLK_STS_ZONE_ACTIVE_RESOURCE ((__force blk_status_t)16)
>
> +/*
> + * BLK_STS_DO_NOT_RETRY is returned from the driver in the completion path
> + * if the device returns a status indicating that if the same command is
> + * re-submitted it is expected to fail.
> + */
> +#define BLK_STS_DO_NOT_RETRY ((__force blk_status_t)17)
> +
> /**
> * blk_path_error - returns true if error may be path related
> * @error: status the request was completed with
> @@ -157,6 +164,7 @@ typedef u8 __bitwise blk_status_t;
> static inline bool blk_path_error(blk_status_t error)
> {
> switch (error) {
> + case BLK_STS_DO_NOT_RETRY:
> case BLK_STS_NOTSUPP:
> case BLK_STS_NOSPC:
> case BLK_STS_TARGET:
>
Reviewed-by: Hannes Reinecke <hare at suse.de>
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare at suse.de +49 911 74053 688
SUSE Software Solutions Germany GmbH, 90409 Nürnberg
GF: F. Imendörffer, HRB 36809 (AG Nürnberg)
More information about the Linux-nvme
mailing list