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@xxxxxx/ > > Suggested-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx> > --- > 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@xxxxxxx> Hannes -- Dr. Hannes Reinecke Kernel Storage Architect hare@xxxxxxx +49 911 74053 688 SUSE Software Solutions Germany GmbH, 90409 Nürnberg GF: F. Imendörffer, HRB 36809 (AG Nürnberg)