From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Javed Hasan <jhasan@marvell.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Sasha Levin <sashal@kernel.org>,
linux-scsi@vger.kernel.org
Subject: [PATCH AUTOSEL 5.4 48/51] scsi: qedf: Add check to synchronize abort and flush
Date: Wed, 14 Jul 2021 15:45:10 -0400 [thread overview]
Message-ID: <20210714194513.54827-48-sashal@kernel.org> (raw)
In-Reply-To: <20210714194513.54827-1-sashal@kernel.org>
From: Javed Hasan <jhasan@marvell.com>
[ Upstream commit df99446d5c2a63dc6e6920c8090da0e9da6539d5 ]
A race condition was observed between qedf_cleanup_fcport() and
qedf_process_error_detect()->qedf_initiate_abts():
[2069091.203145] BUG: unable to handle kernel NULL pointer dereference at 0000000000000030
[2069091.213100] IP: [<ffffffffc0666cc6>] qedf_process_error_detect+0x96/0x130 [qedf]
[2069091.223391] PGD 1943049067 PUD 194304e067 PMD 0
[2069091.233420] Oops: 0000 [#1] SMP
[2069091.361820] CPU: 1 PID: 14751 Comm: kworker/1:46 Kdump: loaded Tainted: P OE ------------ 3.10.0-1160.25.1.el7.x86_64 #1
[2069091.388474] Hardware name: HPE Synergy 480 Gen10/Synergy 480 Gen10 Compute Module, BIOS I42 04/08/2020
[2069091.402148] Workqueue: qedf_io_wq qedf_fp_io_handler [qedf]
[2069091.415780] task: ffff9bb9f5190000 ti: ffff9bacaef9c000 task.ti: ffff9bacaef9c000
[2069091.429590] RIP: 0010:[<ffffffffc0666cc6>] [<ffffffffc0666cc6>] qedf_process_error_detect+0x96/0x130 [qedf]
[2069091.443666] RSP: 0018:ffff9bacaef9fdb8 EFLAGS: 00010246
[2069091.457692] RAX: 0000000000000000 RBX: ffff9bbbbbfb18a0 RCX: ffffffffc0672310
[2069091.471997] RDX: 00000000000005de RSI: ffffffffc066e7f0 RDI: ffff9beb3f4538d8
[2069091.486130] RBP: ffff9bacaef9fdd8 R08: 0000000000006000 R09: 0000000000006000
[2069091.500321] R10: 0000000000001551 R11: ffffb582996ffff8 R12: ffffb5829b39cc18
[2069091.514779] R13: ffff9badab380c28 R14: ffffd5827f643900 R15: 0000000000000040
[2069091.529472] FS: 0000000000000000(0000) GS:ffff9beb3f440000(0000) knlGS:0000000000000000
[2069091.543926] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[2069091.558942] CR2: 0000000000000030 CR3: 000000193b9a2000 CR4: 00000000007607e0
[2069091.573424] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[2069091.587876] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[2069091.602007] PKRU: 00000000
[2069091.616010] Call Trace:
[2069091.629902] [<ffffffffc0663969>] qedf_process_cqe+0x109/0x2e0 [qedf]
[2069091.643941] [<ffffffffc0663b66>] qedf_fp_io_handler+0x26/0x60 [qedf]
[2069091.657948] [<ffffffff85ebddcf>] process_one_work+0x17f/0x440
[2069091.672111] [<ffffffff85ebeee6>] worker_thread+0x126/0x3c0
[2069091.686057] [<ffffffff85ebedc0>] ? manage_workers.isra.26+0x2a0/0x2a0
[2069091.700033] [<ffffffff85ec5da1>] kthread+0xd1/0xe0
[2069091.713891] [<ffffffff85ec5cd0>] ? insert_kthread_work+0x40/0x40
Add check in qedf_process_error_detect(). When flush is active, let the
cmds be completed from the cleanup contex.
Link: https://lore.kernel.org/r/20210624171802.598-1-jhasan@marvell.com
Signed-off-by: Javed Hasan <jhasan@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/scsi/qedf/qedf_io.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c
index e749a2dcaad7..4e8a284e606c 100644
--- a/drivers/scsi/qedf/qedf_io.c
+++ b/drivers/scsi/qedf/qedf_io.c
@@ -1504,9 +1504,19 @@ void qedf_process_error_detect(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
{
int rval;
+ if (io_req == NULL) {
+ QEDF_INFO(NULL, QEDF_LOG_IO, "io_req is NULL.\n");
+ return;
+ }
+
+ if (io_req->fcport == NULL) {
+ QEDF_INFO(NULL, QEDF_LOG_IO, "fcport is NULL.\n");
+ return;
+ }
+
if (!cqe) {
QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_IO,
- "cqe is NULL for io_req %p\n", io_req);
+ "cqe is NULL for io_req %p\n", io_req);
return;
}
@@ -1522,6 +1532,16 @@ void qedf_process_error_detect(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
le32_to_cpu(cqe->cqe_info.err_info.rx_buf_off),
le32_to_cpu(cqe->cqe_info.err_info.rx_id));
+ /* When flush is active, let the cmds be flushed out from the cleanup context */
+ if (test_bit(QEDF_RPORT_IN_TARGET_RESET, &io_req->fcport->flags) ||
+ (test_bit(QEDF_RPORT_IN_LUN_RESET, &io_req->fcport->flags) &&
+ io_req->sc_cmd->device->lun == (u64)io_req->fcport->lun_reset_lun)) {
+ QEDF_ERR(&qedf->dbg_ctx,
+ "Dropping EQE for xid=0x%x as fcport is flushing",
+ io_req->xid);
+ return;
+ }
+
if (qedf->stop_io_on_error) {
qedf_stop_all_io(qedf);
return;
--
2.30.2
next prev parent reply other threads:[~2021-07-14 19:51 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-14 19:44 [PATCH AUTOSEL 5.4 01/51] ARM: dts: gemini: rename mdio to the right name Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 02/51] ARM: dts: gemini: add device_type on pci Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 03/51] ARM: dts: rockchip: fix pinctrl sleep nodename for rk3036-kylin and rk3288 Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 04/51] arm64: dts: rockchip: fix pinctrl sleep nodename for rk3399.dtsi Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 05/51] ARM: dts: rockchip: Fix the timer clocks order Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 06/51] ARM: dts: rockchip: Fix IOMMU nodes properties on rk322x Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 07/51] ARM: dts: rockchip: Fix power-controller node names for rk3066a Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 08/51] ARM: dts: rockchip: Fix power-controller node names for rk3188 Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 09/51] ARM: dts: rockchip: Fix power-controller node names for rk3288 Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 10/51] arm64: dts: rockchip: Fix power-controller node names for px30 Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 11/51] arm64: dts: rockchip: Fix power-controller node names for rk3328 Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 12/51] reset: ti-syscon: fix to_ti_syscon_reset_data macro Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 13/51] ARM: brcmstb: dts: fix NAND nodes names Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 14/51] ARM: Cygnus: " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 15/51] ARM: NSP: " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 16/51] ARM: dts: BCM63xx: Fix " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 17/51] ARM: dts: Hurricane 2: " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 18/51] ARM: dts: imx25-pinfunc: Fix gpio function name for pads GPIO_[A-F] Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 19/51] ARM: dts: imx6: phyFLEX: Fix UART hardware flow control Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 20/51] ARM: imx: pm-imx5: Fix references to imx5_cpu_suspend_info Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 21/51] rtc: mxc_v2: add missing MODULE_DEVICE_TABLE Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 22/51] kbuild: sink stdout from cmd for silent build Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 23/51] ARM: dts: am335x: align GPIO hog names with dt-schema Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 24/51] ARM: dts: am437x: align gpio " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 25/51] ARM: dts: omap3: " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 26/51] ARM: dts: omap5-board-common: " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 27/51] ARM: dts: dra7x-evm: Align GPIO " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 28/51] ARM: dts: am57xx-cl-som-am57x: fix ti,no-reset-on-init flag for gpios Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 29/51] ARM: dts: am437x-gp-evm: " Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 30/51] ARM: dts: stm32: fix gpio-keys node on STM32 MCU boards Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 31/51] ARM: dts: stm32: fix RCC node name on stm32f429 MCU Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 32/51] ARM: dts: stm32: fix timer nodes on STM32 MCU to prevent warnings Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 33/51] arm64: dts: juno: Update SCPI nodes as per the YAML schema Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 34/51] ARM: dts: rockchip: fix supply properties in io-domains nodes Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 35/51] ARM: dts: stm32: fix i2c node name on stm32f746 to prevent warnings Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 36/51] ARM: dts: stm32: move stmmac axi config in ethernet node on stm32mp15 Sasha Levin
2021-07-14 19:44 ` [PATCH AUTOSEL 5.4 37/51] soc/tegra: fuse: Fix Tegra234-only builds Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 38/51] firmware: tegra: bpmp: " Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 39/51] arm64: dts: ls208xa: remove bus-num from dspi node Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 40/51] arm64: dts: imx8mq: assign PCIe clocks Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 41/51] thermal/core: Correct function name thermal_zone_device_unregister() Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 42/51] kbuild: mkcompile_h: consider timestamp if KBUILD_BUILD_TIMESTAMP is set Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 43/51] rtc: max77686: Do not enforce (incorrect) interrupt trigger type Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 44/51] scsi: aic7xxx: Fix unintentional sign extension issue on left shift of u8 Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 45/51] scsi: libsas: Add LUN number check in .slave_alloc callback Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 46/51] scsi: be2iscsi: Fix some missing space in some messages Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 47/51] scsi: libfc: Fix array index out of bound exception Sasha Levin
2021-07-14 19:45 ` Sasha Levin [this message]
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 49/51] sched/fair: Fix CFS bandwidth hrtimer expiry type Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 50/51] s390: introduce proper type handling call_on_stack() macro Sasha Levin
2021-07-14 19:45 ` [PATCH AUTOSEL 5.4 51/51] cifs: prevent NULL deref in cifs_compose_mount_options() 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=20210714194513.54827-48-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=jhasan@marvell.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).