linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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


  parent reply	other threads:[~2021-07-14 19:58 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 \
    --subject='Re: [PATCH AUTOSEL 5.4 48/51] scsi: qedf: Add check to synchronize abort and flush' \
    /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

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).