[SCSI] 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 <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Родитель
a12e07bc62
Коммит
f560351106
|
@ -1294,6 +1294,10 @@ typedef struct { /* FireFly BIU registers */
|
||||||
#define CMD_FCP_IREAD_CX 0x1B
|
#define CMD_FCP_IREAD_CX 0x1B
|
||||||
#define CMD_FCP_ICMND_CR 0x1C
|
#define CMD_FCP_ICMND_CR 0x1C
|
||||||
#define CMD_FCP_ICMND_CX 0x1D
|
#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_MSG 0x20
|
||||||
#define CMD_ADAPTER_DUMP 0x22
|
#define CMD_ADAPTER_DUMP 0x22
|
||||||
|
@ -1320,6 +1324,9 @@ typedef struct { /* FireFly BIU registers */
|
||||||
#define CMD_FCP_IREAD64_CX 0x9B
|
#define CMD_FCP_IREAD64_CX 0x9B
|
||||||
#define CMD_FCP_ICMND64_CR 0x9C
|
#define CMD_FCP_ICMND64_CR 0x9C
|
||||||
#define CMD_FCP_ICMND64_CX 0x9D
|
#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_CR 0xC2
|
||||||
#define CMD_GEN_REQUEST64_CX 0xC3
|
#define CMD_GEN_REQUEST64_CX 0xC3
|
||||||
|
|
|
@ -519,7 +519,8 @@ lpfc_handle_eratt(struct lpfc_hba * phba)
|
||||||
struct lpfc_sli_ring *pring;
|
struct lpfc_sli_ring *pring;
|
||||||
uint32_t event_data;
|
uint32_t event_data;
|
||||||
|
|
||||||
if (phba->work_hs & HS_FFER6) {
|
if (phba->work_hs & HS_FFER6 ||
|
||||||
|
phba->work_hs & HS_FFER5) {
|
||||||
/* Re-establishing Link */
|
/* Re-establishing Link */
|
||||||
lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT,
|
lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT,
|
||||||
"%d:1301 Re-establishing Link "
|
"%d:1301 Re-establishing Link "
|
||||||
|
|
|
@ -679,6 +679,9 @@ lpfc_scsi_tgt_reset(struct lpfc_scsi_buf * lpfc_cmd, struct lpfc_hba * phba,
|
||||||
struct lpfc_iocbq *iocbqrsp;
|
struct lpfc_iocbq *iocbqrsp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!rdata->pnode)
|
||||||
|
return FAILED;
|
||||||
|
|
||||||
lpfc_cmd->rdata = rdata;
|
lpfc_cmd->rdata = rdata;
|
||||||
ret = lpfc_scsi_prep_task_mgmt_cmd(phba, lpfc_cmd, lun,
|
ret = lpfc_scsi_prep_task_mgmt_cmd(phba, lpfc_cmd, lun,
|
||||||
FCP_TARGET_RESET);
|
FCP_TARGET_RESET);
|
||||||
|
@ -985,20 +988,34 @@ lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
|
||||||
|
|
||||||
lpfc_block_error_handler(cmnd);
|
lpfc_block_error_handler(cmnd);
|
||||||
spin_lock_irq(shost->host_lock);
|
spin_lock_irq(shost->host_lock);
|
||||||
|
loopcnt = 0;
|
||||||
/*
|
/*
|
||||||
* If target is not in a MAPPED state, delay the reset until
|
* If target is not in a MAPPED state, delay the reset until
|
||||||
* target is rediscovered or devloss timeout expires.
|
* target is rediscovered or devloss timeout expires.
|
||||||
*/
|
*/
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
if (!pnode)
|
if (!pnode)
|
||||||
break;
|
return FAILED;
|
||||||
|
|
||||||
if (pnode->nlp_state != NLP_STE_MAPPED_NODE) {
|
if (pnode->nlp_state != NLP_STE_MAPPED_NODE) {
|
||||||
spin_unlock_irq(phba->host->host_lock);
|
spin_unlock_irq(phba->host->host_lock);
|
||||||
schedule_timeout_uninterruptible(msecs_to_jiffies(500));
|
schedule_timeout_uninterruptible(msecs_to_jiffies(500));
|
||||||
spin_lock_irq(phba->host->host_lock);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,10 @@ lpfc_sli_iocb_cmd_type(uint8_t iocb_cmnd)
|
||||||
case CMD_FCP_IREAD_CX:
|
case CMD_FCP_IREAD_CX:
|
||||||
case CMD_FCP_ICMND_CR:
|
case CMD_FCP_ICMND_CR:
|
||||||
case CMD_FCP_ICMND_CX:
|
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_MSG:
|
||||||
case CMD_ADAPTER_DUMP:
|
case CMD_ADAPTER_DUMP:
|
||||||
case CMD_XMIT_SEQUENCE64_CR:
|
case CMD_XMIT_SEQUENCE64_CR:
|
||||||
|
@ -131,6 +135,9 @@ lpfc_sli_iocb_cmd_type(uint8_t iocb_cmnd)
|
||||||
case CMD_FCP_IREAD64_CX:
|
case CMD_FCP_IREAD64_CX:
|
||||||
case CMD_FCP_ICMND64_CR:
|
case CMD_FCP_ICMND64_CR:
|
||||||
case CMD_FCP_ICMND64_CX:
|
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_CR:
|
||||||
case CMD_GEN_REQUEST64_CX:
|
case CMD_GEN_REQUEST64_CX:
|
||||||
case CMD_XMIT_ELS_RSP64_CX:
|
case CMD_XMIT_ELS_RSP64_CX:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче