lpfc 8.1.11 : Misc Fixes
Subsystems (2)
PATCH 8/9 lpfc 8.1.11 : Misc Fixes
Misc Fixes:
- Prevent references to NULL node list element in reset routines.
- Add missing IOCB types to switch tables
- Reset the card on Port Error 5
- Fix infinite loop in LUN reset
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_hw.h +7 -0
@@ -1294,6 +1294,10 @@ typedef struct { /* FireFly BIU registe#define CMD_FCP_IREAD_CX 0x1B#define CMD_FCP_ICMND_CR 0x1C#define CMD_FCP_ICMND_CX 0x1D +#define CMD_FCP_TSEND_CX 0x1F +#define CMD_FCP_TRECEIVE_CX 0x21 +#define CMD_FCP_TRSP_CX 0x23 +#define CMD_FCP_AUTO_TRSP_CX 0x29#define CMD_ADAPTER_MSG 0x20#define CMD_ADAPTER_DUMP 0x22
@@ -1320,6 +1324,9 @@ typedef struct { /* FireFly BIU registe#define CMD_FCP_IREAD64_CX 0x9B#define CMD_FCP_ICMND64_CR 0x9C#define CMD_FCP_ICMND64_CX 0x9D +#define CMD_FCP_TSEND64_CX 0x9F +#define CMD_FCP_TRECEIVE64_CX 0xA1 +#define CMD_FCP_TRSP64_CX 0xA3#define CMD_GEN_REQUEST64_CR 0xC2#define CMD_GEN_REQUEST64_CX 0xC3
drivers/scsi/lpfc/lpfc_init.c +2 -1
@@ -519,7 +519,8 @@ lpfc_handle_eratt(struct lpfc_hba * phbastruct lpfc_sli_ring *pring;uint32_t event_data; -if (phba->work_hs &HS_FFER6 ) { +if (phba->work_hs &HS_FFER6 || + phba->work_hs &HS_FFER5 ) {/* Re-establishing Link */ lpfc_printf_log (phba,KERN_INFO ,LOG_LINK_EVENT , "%d:1301 Re-establishing Link "
drivers/scsi/lpfc/lpfc_scsi.c +19 -2
@@ -679,6 +679,9 @@ lpfc_scsi_tgt_reset(struct lpfc_scsi_bufstruct lpfc_iocbq *iocbqrsp;int ret; +if (!rdata->pnode) +return FAILED ; + lpfc_cmd->rdata = rdata; ret =lpfc_scsi_prep_task_mgmt_cmd (phba, lpfc_cmd, lun,FCP_TARGET_RESET );
@@ -985,20 +988,34 @@ lpfc_reset_lun_handler(struct scsi_cmndlpfc_block_error_handler (cmnd);spin_lock_irq (shost->host_lock); + loopcnt =0 ;/* * If target is not in a MAPPED state, delay the reset until * target is rediscovered or devloss timeout expires. */ while (1 ) {if (!pnode) -break ; +return FAILED ;if (pnode->nlp_state !=NLP_STE_MAPPED_NODE ) {spin_unlock_irq (phba->host->host_lock);schedule_timeout_uninterruptible (msecs_to_jiffies (500 ));spin_lock_irq (phba->host->host_lock); + loopcnt++; + rdata = cmnd->device->hostdata; +if (!rdata || + (loopcnt > ((phba->cfg_devloss_tmo *2 ) +1 ))) { +lpfc_printf_log (phba,KERN_ERR ,LOG_FCP , +"%d:0721 LUN Reset rport failure:" +" cnt x%x rdata x%p\n" , + phba->brd_no, loopcnt, rdata); + goto out; + } + pnode = rdata->pnode; +if (!pnode) +return FAILED ; } -if ((pnode) && (pnode->nlp_state ==NLP_STE_MAPPED_NODE )) +if (pnode->nlp_state ==NLP_STE_MAPPED_NODE )break ; }
drivers/scsi/lpfc/lpfc_sli.c +7 -0
@@ -117,6 +117,10 @@ lpfc_sli_iocb_cmd_type(uint8_t iocb_cmndcase CMD_FCP_IREAD_CX :case CMD_FCP_ICMND_CR :case CMD_FCP_ICMND_CX : +case CMD_FCP_TSEND_CX : +case CMD_FCP_TRSP_CX : +case CMD_FCP_TRECEIVE_CX : +case CMD_FCP_AUTO_TRSP_CX :case CMD_ADAPTER_MSG :case CMD_ADAPTER_DUMP :case CMD_XMIT_SEQUENCE64_CR :
@@ -131,6 +135,9 @@ lpfc_sli_iocb_cmd_type(uint8_t iocb_cmndcase CMD_FCP_IREAD64_CX :case CMD_FCP_ICMND64_CR :case CMD_FCP_ICMND64_CX : +case CMD_FCP_TSEND64_CX : +case CMD_FCP_TRSP64_CX : +case CMD_FCP_TRECEIVE64_CX :case CMD_GEN_REQUEST64_CR :case CMD_GEN_REQUEST64_CX :case CMD_XMIT_ELS_RSP64_CX :