From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: James Smart <jsmart2021@gmail.com>,
Dick Kennedy <dick.kennedy@broadcom.com>,
Hannes Reinecke <hare@suse.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Sasha Levin <sashal@kernel.org>,
linux-scsi@vger.kernel.org
Subject: [PATCH AUTOSEL 4.4 69/77] scsi: lpfc: fcoe: Fix link down issue after 1000+ link bounces
Date: Sat, 16 Nov 2019 10:53:31 -0500 [thread overview]
Message-ID: <20191116155339.11909-69-sashal@kernel.org> (raw)
In-Reply-To: <20191116155339.11909-1-sashal@kernel.org>
From: James Smart <jsmart2021@gmail.com>
[ Upstream commit 036cad1f1ac9ce03e2db94b8460f98eaf1e1ee4c ]
On FCoE adapters, when running link bounce test in a loop, initiator
failed to login with switch switch and required driver reload to
recover. Switch reached a point where all subsequent FLOGIs would be
LS_RJT'd. Further testing showed the condition to be related to not
performing FCF discovery between FLOGI's.
Fix by monitoring FLOGI failures and once a repeated error is seen
repeat FCF discovery.
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Reviewed-by: Hannes Reinecke <hare@suse.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 | 2 ++
drivers/scsi/lpfc/lpfc_hbadisc.c | 20 ++++++++++++++++++++
drivers/scsi/lpfc/lpfc_init.c | 2 +-
drivers/scsi/lpfc/lpfc_sli.c | 11 ++---------
drivers/scsi/lpfc/lpfc_sli4.h | 1 +
5 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 82a690924f5eb..7ca8c2522c928 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -1124,6 +1124,7 @@ lpfc_cmpl_els_flogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
phba->fcf.fcf_flag &= ~FCF_DISCOVERY;
phba->hba_flag &= ~(FCF_RR_INPROG | HBA_DEVLOSS_TMO);
spin_unlock_irq(&phba->hbalock);
+ phba->fcf.fcf_redisc_attempted = 0; /* reset */
goto out;
}
if (!rc) {
@@ -1138,6 +1139,7 @@ lpfc_cmpl_els_flogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
phba->fcf.fcf_flag &= ~FCF_DISCOVERY;
phba->hba_flag &= ~(FCF_RR_INPROG | HBA_DEVLOSS_TMO);
spin_unlock_irq(&phba->hbalock);
+ phba->fcf.fcf_redisc_attempted = 0; /* reset */
goto out;
}
}
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index a67950908db17..d50db2004d21e 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -1966,6 +1966,26 @@ int lpfc_sli4_fcf_rr_next_proc(struct lpfc_vport *vport, uint16_t fcf_index)
"failover and change port state:x%x/x%x\n",
phba->pport->port_state, LPFC_VPORT_UNKNOWN);
phba->pport->port_state = LPFC_VPORT_UNKNOWN;
+
+ if (!phba->fcf.fcf_redisc_attempted) {
+ lpfc_unregister_fcf(phba);
+
+ rc = lpfc_sli4_redisc_fcf_table(phba);
+ if (!rc) {
+ lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
+ "3195 Rediscover FCF table\n");
+ phba->fcf.fcf_redisc_attempted = 1;
+ lpfc_sli4_clear_fcf_rr_bmask(phba);
+ } else {
+ lpfc_printf_log(phba, KERN_WARNING, LOG_FIP,
+ "3196 Rediscover FCF table "
+ "failed. Status:x%x\n", rc);
+ }
+ } else {
+ lpfc_printf_log(phba, KERN_WARNING, LOG_FIP,
+ "3197 Already rediscover FCF table "
+ "attempted. No more retry\n");
+ }
goto stop_flogi_current_fcf;
} else {
lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_ELS,
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 60c21093f8656..7e06fd6127ccb 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -4376,7 +4376,7 @@ lpfc_sli4_async_fip_evt(struct lpfc_hba *phba,
break;
}
/* If fast FCF failover rescan event is pending, do nothing */
- if (phba->fcf.fcf_flag & FCF_REDISC_EVT) {
+ if (phba->fcf.fcf_flag & (FCF_REDISC_EVT | FCF_REDISC_PEND)) {
spin_unlock_irq(&phba->hbalock);
break;
}
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index ad4f16ab7f7a2..523a1058078a5 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -16350,15 +16350,8 @@ lpfc_sli4_fcf_rr_next_index_get(struct lpfc_hba *phba)
goto initial_priority;
lpfc_printf_log(phba, KERN_WARNING, LOG_FIP,
"2844 No roundrobin failover FCF available\n");
- if (next_fcf_index >= LPFC_SLI4_FCF_TBL_INDX_MAX)
- return LPFC_FCOE_FCF_NEXT_NONE;
- else {
- lpfc_printf_log(phba, KERN_WARNING, LOG_FIP,
- "3063 Only FCF available idx %d, flag %x\n",
- next_fcf_index,
- phba->fcf.fcf_pri[next_fcf_index].fcf_rec.flag);
- return next_fcf_index;
- }
+
+ return LPFC_FCOE_FCF_NEXT_NONE;
}
if (next_fcf_index < LPFC_SLI4_FCF_TBL_INDX_MAX &&
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index 1e916e16ce989..0ecf92c8a2882 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -237,6 +237,7 @@ struct lpfc_fcf {
#define FCF_REDISC_EVT 0x100 /* FCF rediscovery event to worker thread */
#define FCF_REDISC_FOV 0x200 /* Post FCF rediscovery fast failover */
#define FCF_REDISC_PROG (FCF_REDISC_PEND | FCF_REDISC_EVT)
+ uint16_t fcf_redisc_attempted;
uint32_t addr_mode;
uint32_t eligible_fcf_cnt;
struct lpfc_fcf_rec current_rec;
--
2.20.1
next prev parent reply other threads:[~2019-11-16 15:55 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-16 15:52 [PATCH AUTOSEL 4.4 01/77] ALSA: isight: fix leak of reference to firewire unit in error path of .probe callback Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 02/77] printk: fix integer overflow in setup_log_buf() Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 03/77] gfs2: Fix marking bitmaps non-full Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 04/77] synclink_gt(): fix compat_ioctl() Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 05/77] powerpc: Fix signedness bug in update_flash_db() Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 06/77] powerpc/eeh: Fix use of EEH_PE_KEEP on wrong field Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 07/77] brcmsmac: AP mode: update beacon when TIM changes Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 08/77] spi: sh-msiof: fix deferred probing Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 09/77] mmc: mediatek: fix cannot receive new request when msdc_cmd_is_ready fail Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 10/77] btrfs: handle error of get_old_root Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 11/77] gsmi: Fix bug in append_to_eventlog sysfs handler Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 12/77] misc: mic: fix a DMA pool free failure Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 13/77] amiflop: clean up on errors during setup Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 14/77] scsi: ips: fix missing break in switch Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 15/77] KVM/x86: Fix invvpid and invept register operand size in 64-bit mode Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 16/77] scsi: isci: Use proper enumerated type in atapi_d2h_reg_frame_handler Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 17/77] scsi: isci: Change sci_controller_start_task's return type to sci_status Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 18/77] scsi: iscsi_tcp: Explicitly cast param in iscsi_sw_tcp_host_get_param Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 19/77] clk: mmp2: fix the clock id for sdh2_clk and sdh3_clk Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 20/77] scsi: dc395x: fix dma API usage in srb_done Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 21/77] scsi: dc395x: fix DMA API usage in sg_update_list Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 22/77] net: fix warning in af_unix Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 23/77] kprobes, x86/ptrace.h: Make regs_get_kernel_stack_nth() not fault on bad stack Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 24/77] ALSA: i2c/cs8427: Fix int to char conversion Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 25/77] macintosh/windfarm_smu_sat: Fix debug output Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 26/77] USB: misc: appledisplay: fix backlight update_status return code Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 27/77] SUNRPC: Fix a compile warning for cmpxchg64() Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 28/77] atm: zatm: Fix empty body Clang warnings Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 29/77] s390/perf: Return error when debug_register fails Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 30/77] spi: omap2-mcspi: Set FIFO DMA trigger level to word length Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 31/77] sparc: Fix parport build warnings Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 32/77] ceph: fix dentry leak in ceph_readdir_prepopulate Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 33/77] rtc: s35390a: Change buf's type to u8 in s35390a_init Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 34/77] mISDN: Fix type of switch control variable in ctrl_teimanager Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 35/77] qlcnic: fix a return in qlcnic_dcb_get_capability() Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 36/77] mfd: mc13xxx-core: Fix PMIC shutdown when reading ADC values Sasha Levin
2019-11-16 15:52 ` [PATCH AUTOSEL 4.4 37/77] mfd: max8997: Enale irq-wakeup unconditionally Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 38/77] selftests/ftrace: Fix to test kprobe $comm arg only if available Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 39/77] thermal: rcar_thermal: Prevent hardware access during system suspend Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 40/77] sparc64: Rework xchg() definition to avoid warnings Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 41/77] fs/ocfs2/dlm/dlmdebug.c: fix a sleep-in-atomic-context bug in dlm_print_one_mle() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 42/77] mm/page-writeback.c: fix range_cyclic writeback vs writepages deadlock Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 43/77] um: Make line/tty semantics use true write IRQ Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 44/77] linux/bitmap.h: handle constant zero-size bitmaps correctly Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 45/77] linux/bitmap.h: fix type of nbits in bitmap_shift_right() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 46/77] hfsplus: fix BUG on bnode parent update Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 47/77] hfs: " Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 48/77] hfsplus: prevent btree data loss on ENOSPC Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 49/77] hfs: " Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 50/77] hfsplus: fix return value of hfsplus_get_block() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 51/77] hfs: fix return value of hfs_get_block() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 52/77] fs/hfs/extent.c: fix array out of bounds read of array extent Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 53/77] igb: shorten maximum PHC timecounter update interval Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 54/77] ntb_netdev: fix sleep time mismatch Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 55/77] ntb: intel: fix return value for ndev_vec_mask() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 56/77] ocfs2: don't put and assigning null to bh allocated outside Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 57/77] ocfs2: fix clusters leak in ocfs2_defrag_extent() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 58/77] net: do not abort bulk send on BQL status Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 59/77] sched/fair: Don't increase sd->balance_interval on newidle balance Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 60/77] audit: print empty EXECVE args Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 61/77] wlcore: Fix the return value in case of error in 'wlcore_vendor_cmd_smart_config_start()' Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 62/77] rtl8xxxu: Fix missing break in switch Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 63/77] brcmsmac: never log "tid x is not agg'able" by default Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 64/77] wireless: airo: potential buffer overflow in sprintf() Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 65/77] rtlwifi: rtl8192de: Fix misleading REG_MCUFWDL information Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 66/77] scsi: mpt3sas: Fix Sync cache command failure during driver unload Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 67/77] scsi: mpt3sas: Fix driver modifying persistent data in Manufacturing page11 Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 68/77] scsi: megaraid_sas: Fix msleep granularity Sasha Levin
2019-11-16 15:53 ` Sasha Levin [this message]
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 70/77] dlm: fix invalid free Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 71/77] dlm: don't leak kernel pointer to userspace Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 72/77] net: bcmgenet: return correct value 'ret' from bcmgenet_power_down Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 73/77] sock: Reset dst when changing sk_mark via setsockopt Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 74/77] pinctrl: qcom: spmi-gpio: fix gpio-hog related boot issues Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 75/77] pinctrl: zynq: Use define directive for PIN_CONFIG_IO_STANDARD Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 76/77] PCI: keystone: Use quirk to limit MRRS for K2G Sasha Levin
2019-11-16 15:53 ` [PATCH AUTOSEL 4.4 77/77] spi: omap2-mcspi: Fix DMA and FIFO event trigger size mismatch Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191116155339.11909-69-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=dick.kennedy@broadcom.com \
--cc=hare@suse.com \
--cc=jsmart2021@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).