summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc
diff options
context:
space:
mode:
authorJames Smart <jsmart2021@gmail.com>2018-12-13 18:17:54 -0500
committerMartin K. Petersen <martin.petersen@oracle.com>2018-12-19 22:13:07 -0500
commit529b3ddcfff580a2457eceeda9f248bc77c49246 (patch)
tree4fe7b21f77a729806726415a68a30d3a577f9534 /drivers/scsi/lpfc
parente817e5d7030c7fcc6e707dba7abe51ee5c47732f (diff)
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: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/lpfc')
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index c56ef73463f2..2b8baf190165 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -4707,29 +4707,25 @@ lpfc_update_trunk_link_status(struct lpfc_hba *phba,
4707 phba->trunk_link.link0.state = 4707 phba->trunk_link.link0.state =
4708 bf_get(lpfc_acqe_fc_la_trunk_link_status_port0, acqe_fc) 4708 bf_get(lpfc_acqe_fc_la_trunk_link_status_port0, acqe_fc)
4709 ? LPFC_LINK_UP : LPFC_LINK_DOWN; 4709 ? LPFC_LINK_UP : LPFC_LINK_DOWN;
4710 if (port_fault & 0x1) 4710 phba->trunk_link.link0.fault = port_fault & 0x1 ? err : 0;
4711 phba->trunk_link.link0.fault = err;
4712 } 4711 }
4713 if (bf_get(lpfc_acqe_fc_la_trunk_config_port1, acqe_fc)) { 4712 if (bf_get(lpfc_acqe_fc_la_trunk_config_port1, acqe_fc)) {
4714 phba->trunk_link.link1.state = 4713 phba->trunk_link.link1.state =
4715 bf_get(lpfc_acqe_fc_la_trunk_link_status_port1, acqe_fc) 4714 bf_get(lpfc_acqe_fc_la_trunk_link_status_port1, acqe_fc)
4716 ? LPFC_LINK_UP : LPFC_LINK_DOWN; 4715 ? LPFC_LINK_UP : LPFC_LINK_DOWN;
4717 if (port_fault & 0x2) 4716 phba->trunk_link.link1.fault = port_fault & 0x2 ? err : 0;
4718 phba->trunk_link.link1.fault = err;
4719 } 4717 }
4720 if (bf_get(lpfc_acqe_fc_la_trunk_config_port2, acqe_fc)) { 4718 if (bf_get(lpfc_acqe_fc_la_trunk_config_port2, acqe_fc)) {
4721 phba->trunk_link.link2.state = 4719 phba->trunk_link.link2.state =
4722 bf_get(lpfc_acqe_fc_la_trunk_link_status_port2, acqe_fc) 4720 bf_get(lpfc_acqe_fc_la_trunk_link_status_port2, acqe_fc)
4723 ? LPFC_LINK_UP : LPFC_LINK_DOWN; 4721 ? LPFC_LINK_UP : LPFC_LINK_DOWN;
4724 if (port_fault & 0x4) 4722 phba->trunk_link.link2.fault = port_fault & 0x4 ? err : 0;
4725 phba->trunk_link.link2.fault = err;
4726 } 4723 }
4727 if (bf_get(lpfc_acqe_fc_la_trunk_config_port3, acqe_fc)) { 4724 if (bf_get(lpfc_acqe_fc_la_trunk_config_port3, acqe_fc)) {
4728 phba->trunk_link.link3.state = 4725 phba->trunk_link.link3.state =
4729 bf_get(lpfc_acqe_fc_la_trunk_link_status_port3, acqe_fc) 4726 bf_get(lpfc_acqe_fc_la_trunk_link_status_port3, acqe_fc)
4730 ? LPFC_LINK_UP : LPFC_LINK_DOWN; 4727 ? LPFC_LINK_UP : LPFC_LINK_DOWN;
4731 if (port_fault & 0x8) 4728 phba->trunk_link.link3.fault = port_fault & 0x8 ? err : 0;
4732 phba->trunk_link.link3.fault = err;
4733 } 4729 }
4734 4730
4735 lpfc_printf_log(phba, KERN_ERR, LOG_SLI, 4731 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,