| From 4d0d34651029cae122c7f7200f02b75d98d38bbb Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 14 May 2021 12:55:51 -0700 |
| Subject: scsi: lpfc: Fix "Unexpected timeout" error in direct attach topology |
| |
| From: James Smart <jsmart2021@gmail.com> |
| |
| [ Upstream commit e30d55137edef47434c40d7570276a0846fe922c ] |
| |
| An 'unexpected timeout' message may be seen in a point-2-point topology. |
| The message occurs when a PLOGI is received before the driver is notified |
| of FLOGI completion. The FLOGI completion failure causes discovery to be |
| triggered for a second time. The discovery timer is restarted but no new |
| discovery activity is initiated, thus the timeout message eventually |
| appears. |
| |
| In point-2-point, when discovery has progressed before the FLOGI completion |
| is processed, it is not a failure. Add code to FLOGI completion to detect |
| that discovery has progressed and exit the FLOGI handling (noop'ing it). |
| |
| Link: https://lore.kernel.org/r/20210514195559.119853-4-jsmart2021@gmail.com |
| Co-developed-by: Justin Tee <justin.tee@broadcom.com> |
| Signed-off-by: Justin Tee <justin.tee@broadcom.com> |
| Signed-off-by: James Smart <jsmart2021@gmail.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/lpfc/lpfc_els.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c |
| index 5c4172e8c81b..3b72aea9d15d 100644 |
| --- a/drivers/scsi/lpfc/lpfc_els.c |
| +++ b/drivers/scsi/lpfc/lpfc_els.c |
| @@ -1175,6 +1175,15 @@ stop_rr_fcf_flogi: |
| phba->fcf.fcf_redisc_attempted = 0; /* reset */ |
| goto out; |
| } |
| + } else if (vport->port_state > LPFC_FLOGI && |
| + vport->fc_flag & FC_PT2PT) { |
| + /* |
| + * In a p2p topology, it is possible that discovery has |
| + * already progressed, and this completion can be ignored. |
| + * Recheck the indicated topology. |
| + */ |
| + if (!sp->cmn.fPort) |
| + goto out; |
| } |
| |
| flogifail: |
| -- |
| 2.30.2 |
| |