Commit 529b3ddc authored by James Smart's avatar James Smart Committed by Martin K. Petersen

scsi: lpfc: update fault value on successful trunk events.

Currently, when a trunk link goes down due to some fault, the driver
snapshots the fault code.  If the link then comes back up, meaning there is
no fault, the driver is not clearing the fault code so the sysfs link_state
entry reports old/stale data.

Revise the logic so that on successful link up the fault code is cleared.
Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent e817e5d7
...@@ -4707,29 +4707,25 @@ lpfc_update_trunk_link_status(struct lpfc_hba *phba, ...@@ -4707,29 +4707,25 @@ lpfc_update_trunk_link_status(struct lpfc_hba *phba,
phba->trunk_link.link0.state = phba->trunk_link.link0.state =
bf_get(lpfc_acqe_fc_la_trunk_link_status_port0, acqe_fc) bf_get(lpfc_acqe_fc_la_trunk_link_status_port0, acqe_fc)
? LPFC_LINK_UP : LPFC_LINK_DOWN; ? LPFC_LINK_UP : LPFC_LINK_DOWN;
if (port_fault & 0x1) phba->trunk_link.link0.fault = port_fault & 0x1 ? err : 0;
phba->trunk_link.link0.fault = err;
} }
if (bf_get(lpfc_acqe_fc_la_trunk_config_port1, acqe_fc)) { if (bf_get(lpfc_acqe_fc_la_trunk_config_port1, acqe_fc)) {
phba->trunk_link.link1.state = phba->trunk_link.link1.state =
bf_get(lpfc_acqe_fc_la_trunk_link_status_port1, acqe_fc) bf_get(lpfc_acqe_fc_la_trunk_link_status_port1, acqe_fc)
? LPFC_LINK_UP : LPFC_LINK_DOWN; ? LPFC_LINK_UP : LPFC_LINK_DOWN;
if (port_fault & 0x2) phba->trunk_link.link1.fault = port_fault & 0x2 ? err : 0;
phba->trunk_link.link1.fault = err;
} }
if (bf_get(lpfc_acqe_fc_la_trunk_config_port2, acqe_fc)) { if (bf_get(lpfc_acqe_fc_la_trunk_config_port2, acqe_fc)) {
phba->trunk_link.link2.state = phba->trunk_link.link2.state =
bf_get(lpfc_acqe_fc_la_trunk_link_status_port2, acqe_fc) bf_get(lpfc_acqe_fc_la_trunk_link_status_port2, acqe_fc)
? LPFC_LINK_UP : LPFC_LINK_DOWN; ? LPFC_LINK_UP : LPFC_LINK_DOWN;
if (port_fault & 0x4) phba->trunk_link.link2.fault = port_fault & 0x4 ? err : 0;
phba->trunk_link.link2.fault = err;
} }
if (bf_get(lpfc_acqe_fc_la_trunk_config_port3, acqe_fc)) { if (bf_get(lpfc_acqe_fc_la_trunk_config_port3, acqe_fc)) {
phba->trunk_link.link3.state = phba->trunk_link.link3.state =
bf_get(lpfc_acqe_fc_la_trunk_link_status_port3, acqe_fc) bf_get(lpfc_acqe_fc_la_trunk_link_status_port3, acqe_fc)
? LPFC_LINK_UP : LPFC_LINK_DOWN; ? LPFC_LINK_UP : LPFC_LINK_DOWN;
if (port_fault & 0x8) phba->trunk_link.link3.fault = port_fault & 0x8 ? err : 0;
phba->trunk_link.link3.fault = err;
} }
lpfc_printf_log(phba, KERN_ERR, LOG_SLI, lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment