scsi: lpfc: Change return code on I/Os received during link bounce
During heavy I/O testing with issue_lip to bounce the link, occasionally I/O is terminated with status 3 result 9, which means the RPI is suspended. The I/O is completed and this type of error will result in immediate retry by the SCSI layer. The retry count expires and the I/O fails and returns error to the application. To avoid these quick retry/retries exhausted scenarios change the return code given to the midlayer to DID_REQUEUE rather than DID_ERROR. This gets them retried, and eventually succeed when the link recovers. Link: https://lore.kernel.org/r/20211204002644.116455-3-jsmart2021@gmail.com Co-developed-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
f0d3919697
commit
2e81b1a374
@ -3746,7 +3746,7 @@ typedef struct {
|
||||
#define IOERR_ILLEGAL_COMMAND 0x06
|
||||
#define IOERR_XCHG_DROPPED 0x07
|
||||
#define IOERR_ILLEGAL_FIELD 0x08
|
||||
#define IOERR_BAD_CONTINUE 0x09
|
||||
#define IOERR_RPI_SUSPENDED 0x09
|
||||
#define IOERR_TOO_MANY_BUFFERS 0x0A
|
||||
#define IOERR_RCV_BUFFER_WAITING 0x0B
|
||||
#define IOERR_NO_CONNECTION 0x0C
|
||||
|
@ -4393,6 +4393,7 @@ lpfc_fcp_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
|
||||
if (lpfc_cmd->result == IOERR_INVALID_RPI ||
|
||||
lpfc_cmd->result == IOERR_NO_RESOURCES ||
|
||||
lpfc_cmd->result == IOERR_ABORT_REQUESTED ||
|
||||
lpfc_cmd->result == IOERR_RPI_SUSPENDED ||
|
||||
lpfc_cmd->result == IOERR_SLER_CMD_RCV_FAILURE) {
|
||||
cmd->result = DID_REQUEUE << 16;
|
||||
break;
|
||||
@ -4448,10 +4449,11 @@ lpfc_fcp_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
|
||||
|
||||
lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP,
|
||||
"9039 Iodone <%d/%llu> cmd x%px, error "
|
||||
"x%x SNS x%x x%x Data: x%x x%x\n",
|
||||
"x%x SNS x%x x%x LBA x%llx Data: x%x x%x\n",
|
||||
cmd->device->id, cmd->device->lun, cmd,
|
||||
cmd->result, *lp, *(lp + 3), cmd->retries,
|
||||
scsi_get_resid(cmd));
|
||||
cmd->result, *lp, *(lp + 3),
|
||||
(u64)scsi_get_lba(cmd),
|
||||
cmd->retries, scsi_get_resid(cmd));
|
||||
}
|
||||
|
||||
lpfc_update_stats(vport, lpfc_cmd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user