]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/lpfc/lpfc_els.c
[SCSI] lpfc 8.1.2: Fixed a race condition in the PLOGI retry logic.
[linux-2.6-omap-h63xx.git] / drivers / scsi / lpfc / lpfc_els.c
index 9c9e7661de59b3a3802b31ffad9778d9c76367e6..056f9157d2c8572b236444c10609038b96dd26ac 100644 (file)
@@ -1467,24 +1467,28 @@ lpfc_els_retry_delay_handler(struct lpfc_nodelist *ndlp)
                lpfc_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;