On Wed, 2020-11-11 at 10:28 +0530, Muneendra wrote: > Added a new error code DID_TRANSPORT_MARGINAL to handle marginal > errors in scsi.h > > Added a code in scsi_result_to_blk_status to translate > a new error DID_TRANSPORT_MARGINAL to the corresponding blk_status_t > i.e BLK_STS_TRANSPORT > > Added DID_TRANSPORT_MARGINAL case to scsi_decide_disposition > > Signed-off-by: Muneendra <muneendra.kumar@xxxxxxxxxxxx> > > --- > v7: > Rearranged the patch by moving the DID_TRANSPORT_MARGINAL > and the changes with respect to the same to this patch > from the previous patch2 in v6 > > Removed the previuos patch patch1 in v6 as in the > current approach there is no need of this bit SCMD_NORETRIES_ABORT > > v6: > Rearranged the patch by merging second hunk of the patch2 in v5 > to this patch > > v5: > added the DID_TRANSPORT_MARGINAL case to > scsi_decide_disposition > v4: > Modified the comments in the code appropriately > > v3: > Merged first part of the previous patch(v2 patch3) with > this patch. > > v2: > set the hostbyte as DID_TRANSPORT_MARGINAL instead of > DID_TRANSPORT_FAILFAST. > --- > drivers/scsi/scsi_error.c | 6 ++++++ > drivers/scsi/scsi_lib.c | 1 + > include/scsi/scsi.h | 1 + > 3 files changed, 8 insertions(+) > > diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c > index f11f51e2465f..28056ee498b3 100644 > --- a/drivers/scsi/scsi_error.c > +++ b/drivers/scsi/scsi_error.c > @@ -1861,6 +1861,12 @@ int scsi_decide_disposition(struct scsi_cmnd > *scmd) > * the fast io fail tmo fired), so send IO directly > upwards. > */ > return SUCCESS; > + case DID_TRANSPORT_MARGINAL: > + /* > + * caller has decided not to do retries on > + * abort success, so send IO directly upwards > + */ > + return SUCCESS; > case DID_ERROR: > if (msg_byte(scmd->result) == COMMAND_COMPLETE && > status_byte(scmd->result) == RESERVATION_CONFLICT) > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index 20a357563d3d..ce1e2adaca36 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c > @@ -629,6 +629,7 @@ static blk_status_t > scsi_result_to_blk_status(struct scsi_cmnd *cmd, int result) > return BLK_STS_OK; > return BLK_STS_IOERR; > case DID_TRANSPORT_FAILFAST: > + case DID_TRANSPORT_MARGINAL: > return BLK_STS_TRANSPORT; > case DID_TARGET_FAILURE: > set_host_byte(cmd, DID_OK); > diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h > index 5339baadc082..5b287ad8b727 100644 > --- a/include/scsi/scsi.h > +++ b/include/scsi/scsi.h > @@ -159,6 +159,7 @@ static inline int scsi_is_wlun(u64 lun) > * paths might yield different results > */ > #define DID_ALLOC_FAILURE 0x12 /* Space allocation on the device > failed */ > #define DID_MEDIUM_ERROR 0x13 /* Medium error */ > +#define DID_TRANSPORT_MARGINAL 0x14 /* Transport marginal errors */ > #define DRIVER_OK 0x00 /* Driver > status */ > > /* Reviewed-by: Ewan D. Milne <emilne@xxxxxxxxxx>