diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_nportdisc.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_nportdisc.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c index 4cb9882af157..af3b38aba65e 100644 --- a/drivers/scsi/lpfc/lpfc_nportdisc.c +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c | |||
@@ -661,7 +661,13 @@ lpfc_rcv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, | |||
661 | lpfc_destroy_vport_work_array(phba, vports); | 661 | lpfc_destroy_vport_work_array(phba, vports); |
662 | } | 662 | } |
663 | 663 | ||
664 | if (active_vlink_present) { | 664 | /* |
665 | * Don't re-instantiate if vport is marked for deletion. | ||
666 | * If we are here first then vport_delete is going to wait | ||
667 | * for discovery to complete. | ||
668 | */ | ||
669 | if (!(vport->load_flag & FC_UNLOADING) && | ||
670 | active_vlink_present) { | ||
665 | /* | 671 | /* |
666 | * If there are other active VLinks present, | 672 | * If there are other active VLinks present, |
667 | * re-instantiate the Vlink using FDISC. | 673 | * re-instantiate the Vlink using FDISC. |
@@ -1868,7 +1874,7 @@ lpfc_rcv_logo_logo_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, | |||
1868 | struct lpfc_iocbq *cmdiocb = (struct lpfc_iocbq *)arg; | 1874 | struct lpfc_iocbq *cmdiocb = (struct lpfc_iocbq *)arg; |
1869 | 1875 | ||
1870 | spin_lock_irq(shost->host_lock); | 1876 | spin_lock_irq(shost->host_lock); |
1871 | ndlp->nlp_flag &= NLP_LOGO_ACC; | 1877 | ndlp->nlp_flag |= NLP_LOGO_ACC; |
1872 | spin_unlock_irq(shost->host_lock); | 1878 | spin_unlock_irq(shost->host_lock); |
1873 | lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); | 1879 | lpfc_els_rsp_acc(vport, ELS_CMD_ACC, cmdiocb, ndlp, NULL); |
1874 | return ndlp->nlp_state; | 1880 | return ndlp->nlp_state; |