scsi: lpfc: Fix link state reporting for trunking when adapter is offline
authorJames Smart <jsmart2021@gmail.com>
Thu, 13 Dec 2018 23:17:52 +0000 (15:17 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 20 Dec 2018 03:13:07 +0000 (22:13 -0500)
If the adapter is taken offline, the trunk link port attributes continue to
report trunk links as up even though all links are down as the adapter is
offline.

Clear the trunk links state as part of taking the adapter offline.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_hbadisc.c

index 91189e9c8530f95821c72138c3ff41ab401559cf..4c1ba88b678a6ead1e914da20d77527193569b05 100644 (file)
@@ -888,9 +888,15 @@ lpfc_linkdown(struct lpfc_hba *phba)
        LPFC_MBOXQ_t          *mb;
        int i;
 
-       if (phba->link_state == LPFC_LINK_DOWN)
+       if (phba->link_state == LPFC_LINK_DOWN) {
+               if (phba->sli4_hba.conf_trunk) {
+                       phba->trunk_link.link0.state = 0;
+                       phba->trunk_link.link1.state = 0;
+                       phba->trunk_link.link2.state = 0;
+                       phba->trunk_link.link3.state = 0;
+               }
                return 0;
-
+       }
        /* Block all SCSI stack I/Os */
        lpfc_scsi_dev_block(phba);
 
@@ -901,6 +907,12 @@ lpfc_linkdown(struct lpfc_hba *phba)
        spin_unlock_irq(&phba->hbalock);
        if (phba->link_state > LPFC_LINK_DOWN) {
                phba->link_state = LPFC_LINK_DOWN;
+               if (phba->sli4_hba.conf_trunk) {
+                       phba->trunk_link.link0.state = 0;
+                       phba->trunk_link.link1.state = 0;
+                       phba->trunk_link.link2.state = 0;
+                       phba->trunk_link.link3.state = 0;
+               }
                spin_lock_irq(shost->host_lock);
                phba->pport->fc_flag &= ~FC_LBIT;
                spin_unlock_irq(shost->host_lock);