lpfc 8.1.2 : Fixed a race condition in the PLOGI retry logic.
Subsystems (2)
PATCH 5/22 lpfc 8.1.2 : Fixed a race condition in the PLOGI retry logic.
Fixed a race condition in the PLOGI retry logic.
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_nportdisc.c +8 -0
@@ -1627,6 +1627,14 @@ lpfc_device_recov_npr_node(struct lpfc_h {spin_lock_irq (phba->host->host_lock); ndlp->nlp_flag &= ~NLP_NPR_2B_DISC ; +if (ndlp->nlp_flag &NLP_DELAY_TMO ) { + ndlp->nlp_flag &= ~NLP_DELAY_TMO ; +if (!list_empty (&ndlp->els_retry_evt.evt_listp)) +list_del_init (&ndlp->els_retry_evt.evt_listp); +spin_unlock_irq (phba->host->host_lock); +del_timer_sync (&ndlp->nlp_delayfunc); +return (ndlp->nlp_state); + }spin_unlock_irq (phba->host->host_lock);return (ndlp->nlp_state); }
drivers/scsi/lpfc/lpfc_els.c +16 -12
@@ -1467,24 +1467,28 @@ lpfc_els_retry_delay_handler(struct lpfclpfc_issue_els_flogi (phba, ndlp, retry);break ;case ELS_CMD_PLOGI : - ndlp->nlp_state =NLP_STE_PLOGI_ISSUE ; -lpfc_nlp_list (phba, ndlp,NLP_PLOGI_LIST ); -lpfc_issue_els_plogi (phba, ndlp, retry); +if (!lpfc_issue_els_plogi (phba, ndlp, retry)) { + ndlp->nlp_state =NLP_STE_PLOGI_ISSUE ; +lpfc_nlp_list (phba, ndlp,NLP_PLOGI_LIST ); + }break ;case ELS_CMD_ADISC : - ndlp->nlp_state =NLP_STE_ADISC_ISSUE ; -lpfc_nlp_list (phba, ndlp,NLP_ADISC_LIST ); -lpfc_issue_els_adisc (phba, ndlp, retry); +if (!lpfc_issue_els_adisc (phba, ndlp, retry)) { + ndlp->nlp_state =NLP_STE_ADISC_ISSUE ; +lpfc_nlp_list (phba, ndlp,NLP_ADISC_LIST ); + }break ;case ELS_CMD_PRLI : - ndlp->nlp_state =NLP_STE_PRLI_ISSUE ; -lpfc_nlp_list (phba, ndlp,NLP_PRLI_LIST ); -lpfc_issue_els_prli (phba, ndlp, retry); +if (!lpfc_issue_els_prli (phba, ndlp, retry)) { + ndlp->nlp_state =NLP_STE_PRLI_ISSUE ; +lpfc_nlp_list (phba, ndlp,NLP_PRLI_LIST ); + }break ;case ELS_CMD_LOGO : - ndlp->nlp_state =NLP_STE_NPR_NODE ; -lpfc_nlp_list (phba, ndlp,NLP_NPR_LIST ); -lpfc_issue_els_logo (phba, ndlp, retry); +if (!lpfc_issue_els_logo (phba, ndlp, retry)) { + ndlp->nlp_state =NLP_STE_NPR_NODE ; +lpfc_nlp_list (phba, ndlp,NLP_NPR_LIST ); + }break ; }return ;