lpfc 8.1.4 : Fixed RSCN handling when a PLOGI is in retry
Subsystems (2)
PATCH 2/6 lpfc 8.1.4 : Fixed RSCN handling when a PLOGI is in retry
Fixed RSCN handling when a PLOGI is in retry.
Signed-off-by James Smart <[email protected]>
drivers/scsi/lpfc/lpfc_hbadisc.c +4 -20
@@ -1152,13 +1152,9 @@ lpfc_nlp_list(struct lpfc_hba * phba, st/* Stop delay tmo if taking node off NPR list */ if ((nlp->nlp_flag &NLP_DELAY_TMO ) && (list !=NLP_NPR_LIST )) { - nlp->nlp_flag &= ~NLP_DELAY_TMO ; - nlp->nlp_last_elscmd =0 ;spin_unlock_irq (phba->host->host_lock); -del_timer_sync (&nlp->nlp_delayfunc); +lpfc_cancel_retry_delay_tmo (phba, nlp);spin_lock_irq (phba->host->host_lock); -if (!list_empty (&nlp->els_retry_evt.evt_listp)) -list_del_init (&nlp->els_retry_evt.evt_listp); }break ; }
@@ -1598,13 +1594,7 @@ lpfc_nlp_remove(struct lpfc_hba * phba,if (ndlp->nlp_flag &NLP_DELAY_TMO ) { -spin_lock_irq (phba->host->host_lock); - ndlp->nlp_flag &= ~NLP_DELAY_TMO ; -spin_unlock_irq (phba->host->host_lock); - ndlp->nlp_last_elscmd =0 ; -del_timer_sync (&ndlp->nlp_delayfunc); -if (!list_empty (&ndlp->els_retry_evt.evt_listp)) -list_del_init (&ndlp->els_retry_evt.evt_listp); +lpfc_cancel_retry_delay_tmo (phba, ndlp); }if (ndlp->nlp_disc_refcnt) {
@@ -1896,14 +1886,8 @@ lpfc_setup_disc_node(struct lpfc_hba * p/* Since this node is marked for discovery, * delay timeout is not needed. */ -if (ndlp->nlp_flag &NLP_DELAY_TMO ) { - ndlp->nlp_flag &= ~NLP_DELAY_TMO ; -del_timer_sync (&ndlp->nlp_delayfunc); -if (!list_empty (&ndlp->els_retry_evt. - evt_listp)) -list_del_init (&ndlp->els_retry_evt. - evt_listp); - } +if (ndlp->nlp_flag &NLP_DELAY_TMO ) +lpfc_cancel_retry_delay_tmo (phba, ndlp); }else { ndlp->nlp_flag &= ~NLP_NPR_2B_DISC ; ndlp =NULL ;
drivers/scsi/lpfc/lpfc_nportdisc.c +5 -16
@@ -259,13 +259,8 @@ lpfc_els_abort(struct lpfc_hba * phba, s }while (found);/* If we are delaying issuing an ELS command, cancel it */ -if (ndlp->nlp_flag &NLP_DELAY_TMO ) { - ndlp->nlp_flag &= ~NLP_DELAY_TMO ; - ndlp->nlp_last_elscmd =0 ; -del_timer_sync (&ndlp->nlp_delayfunc); -if (!list_empty (&ndlp->els_retry_evt.evt_listp)) -list_del_init (&ndlp->els_retry_evt.evt_listp); - } +if (ndlp->nlp_flag &NLP_DELAY_TMO ) +lpfc_cancel_retry_delay_tmo (phba, ndlp);return 0 ; }
@@ -1496,7 +1491,7 @@ lpfc_rcv_plogi_npr_node(struct lpfc_hbaif (lpfc_rcv_plogi (phba, ndlp, cmdiocb)) {spin_lock_irq (phba->host->host_lock); - ndlp->nlp_flag &= ~(NLP_NPR_ADISC |NLP_NPR_2B_DISC ); + ndlp->nlp_flag &= ~NLP_NPR_ADISC ;spin_unlock_irq (phba->host->host_lock);return ndlp->nlp_state; }
@@ -1693,16 +1688,10 @@ lpfc_device_recov_npr_node(struct lpfc_h {spin_lock_irq (phba->host->host_lock); ndlp->nlp_flag &= ~NLP_NPR_2B_DISC ; +spin_unlock_irq (phba->host->host_lock);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); - ndlp->nlp_last_elscmd =0 ; -del_timer_sync (&ndlp->nlp_delayfunc); -return ndlp->nlp_state; +lpfc_cancel_retry_delay_tmo (phba, ndlp); } -spin_unlock_irq (phba->host->host_lock);return ndlp->nlp_state; }
drivers/scsi/lpfc/lpfc_crtn.h +1 -0
@@ -84,6 +84,7 @@ int lpfc_els_rsp_adisc_acc(struct lpfc_h struct lpfc_nodelist *);int lpfc_els_rsp_prli_acc (struct lpfc_hba *,struct lpfc_iocbq *,struct lpfc_nodelist *); +void lpfc_cancel_retry_delay_tmo (struct lpfc_hba *,struct lpfc_nodelist *);void lpfc_els_retry_delay (unsigned long );void lpfc_els_retry_delay_handler (struct lpfc_nodelist *); void lpfc_els_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *,
drivers/scsi/lpfc/lpfc_els.c +42 -9
63 lines not on this page · raw message