lpfc 8.3.43: Fixed not processing task management IOCB response status
Subsystems (2)
PATCH 7/8 lpfc 8.3.43: Fixed not processing task management IOCB response status
Fixed not processing task management IOCB response status
This patch implements the changes requested by Jeremy Linton:
http://marc.info/?l=linux-scsi&m=136242124409687&w=2
The patch revises the command issuing behavior, detecting cases where the Task Mgmt command may have completed but with a non-successful status, which it previously treated as a successful TMF. The patch also corrects a flushing of I/O that was done which should only be done on successful TMF completion.
Signed-off-by James Smart <[email protected]>
---
lpfc_bsg.c | 7 ++- lpfc_scsi.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++---------- lpfc_scsi.h | 1 lpfc_sli.c | 5 ++ 4 files changed, 104 insertions(+), 21 deletions(-)
drivers/scsi/lpfc/lpfc_bsg.c +4 -3
@@ -2629,7 +2629,7 @@ static int lpfcdiag_loop_get_xri(struct rspiocbq, (phba->fc_ratov *2 ) + LPFC_DRVR_TIMEOUT); -if (iocb_stat) { +if ((iocb_stat !=IOCB_SUCCESS ) || (rsp->ulpStatus !=IOSTAT_SUCCESS )) { ret_val = -EIO ; goto err_get_xri_exit; }
@@ -3204,8 +3204,9 @@ lpfc_bsg_diag_loopback_run(struct fc_bsg rspiocbq, (phba->fc_ratov *2 ) + LPFC_DRVR_TIMEOUT); -if ((iocb_stat !=IOCB_SUCCESS ) || ((phba->sli_rev <LPFC_SLI_REV4 ) && - (rsp->ulpStatus !=IOCB_SUCCESS ))) { +if ((iocb_stat !=IOCB_SUCCESS ) || + ((phba->sli_rev <LPFC_SLI_REV4 ) && + (rsp->ulpStatus !=IOSTAT_SUCCESS ))) {lpfc_printf_log (phba,KERN_ERR ,LOG_LIBDFC ,"3126 Failed loopback test issue iocb: " "iocb_stat:x%x\n" , iocb_stat);
drivers/scsi/lpfc/lpfc_scsi.c +94 -18
162 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_scsi.h +1 -0
@@ -73,6 +73,7 @@ struct fcp_rsp {#define RSP_RO_MISMATCH_ERR 0x03#define RSP_TM_NOT_SUPPORTED 0x04/* Task mgmt function not supported */ #define RSP_TM_NOT_COMPLETED 0x05/* Task mgmt function not performed */ +#define RSP_TM_INVALID_LU 0x09/* Task mgmt function to invalid LU */ uint32_t rspInfoRsvd;/* FCP_RSP_INFO bytes 4-7 (reserved) */
drivers/scsi/lpfc/lpfc_sli.c +5 -0
@@ -10196,6 +10196,11 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hbaif (iocb_completed) {lpfc_printf_log (phba,KERN_INFO ,LOG_SLI ,"0331 IOCB wake signaled\n" ); +/* Note: we are not indicating if the IOCB has a success +* status or not - that's for the caller to check. +* IOCB_SUCCESS means just that the command was sent and +* completed. Not that it completed successfully. +* */ }else if (timeleft ==0 ) {lpfc_printf_log (phba,KERN_ERR ,LOG_SLI , "0338 IOCB wait timeout error - no "