Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp681573pxv; Thu, 22 Jul 2021 09:37:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxWBgO3j/4xlX1OZpicZ/B+aekqULw6vK+gU5inDgnRU/FD60tSn9oTdPjllWlUsjExeNGL X-Received: by 2002:a92:6605:: with SMTP id a5mr486717ilc.15.1626971867170; Thu, 22 Jul 2021 09:37:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626971867; cv=none; d=google.com; s=arc-20160816; b=bdome51KNhKPWM5xipR4T+VR1XBRTFS1uT9YPQFWpZ8DoATURCxZvwyaI9vqbm1NYr HTg1oYFe6tpqJHgHgzzWnxWHJzAh6bBUMQjNXUouNbUPIbq2NepIy6xqWtzhTQpTtLxj zupnBC4UI3mm8vDPOE9B9T4Rz7e7gezz0pTHsdo/Wgmk/hEsptvqTXpY1+6C6A7OKXvH hdbEutSNZPsJOoYBhsDwT5nSui/QJTZPcBLeS3bxfLysffKkhBSIpFGu60HpGDg/E6gX Cz01dQ03q2+UXTDbhcbMiSWqkOiZKF9wWFdKSFSrUwSWaqcxe5aj1egdCZ3D+WQzJDHH dTiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=KgJV0xiAYk/a1EyaY/IPghFphoU8+8zMBT+dp8SP/44=; b=DAhyZAzcMl6KuF8SpocdQvW6m91uQ8K9TMZ0dxPOglEAJlSX/ZFXY1I99RkZN4BLXP WG51MQ+VvHgW9x2HpaI/wlwRcThZ2BG9O6YCCD7a5IePXCETpsVcnm/6vTHcWYBXmpJY GsztFOxXRIfjelkZMs4Y5ymZQiu0RxC79DwI2h4vXXPmvYbCCGc04j+f99mWP3Lsk6Ih 9O0aWxlY6xsI7qmtG85HJinvmqAQ+7AlrvvduWdS3BK8KNHllVpwFADHgeBA8KMKVjPJ LkGqnVE55oHk5EHx22R98ou4P3dy8ZFg0vUF20UFnjmTgzviK8+ZN4/nVSrqfrPHxS8P U9wQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=hCmTjJIe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q10si35604891ilu.60.2021.07.22.09.37.35; Thu, 22 Jul 2021 09:37:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=hCmTjJIe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230381AbhGVP4P (ORCPT + 99 others); Thu, 22 Jul 2021 11:56:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:58906 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229952AbhGVPys (ORCPT ); Thu, 22 Jul 2021 11:54:48 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 23C766135B; Thu, 22 Jul 2021 16:35:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626971722; bh=aoCw+98MljVsKnZcliR9Zy83dpjo7pNBJ1EuEwEH8S4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hCmTjJIeo9UEdrsxLply8KEdVqyI1lk+GMvKICbIM7YeLLdT0C0Ee4IPcsIpOCk62 8tQs+fZIhnZ+q9lu5AA+fg4ilqzwpRxqau9mz14pJwmO6u7LmkVO5R4RPl5c9+0WyS 4uEh07Ztf+F4+mkh35cWk80hm5E9LKibnzak5wg4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Javed Hasan , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.4 41/71] scsi: qedf: Add check to synchronize abort and flush Date: Thu, 22 Jul 2021 18:31:16 +0200 Message-Id: <20210722155619.233917838@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210722155617.865866034@linuxfoundation.org> References: <20210722155617.865866034@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Javed Hasan [ 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: [] 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:[] [] 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] [] qedf_process_cqe+0x109/0x2e0 [qedf] [2069091.643941] [] qedf_fp_io_handler+0x26/0x60 [qedf] [2069091.657948] [] process_one_work+0x17f/0x440 [2069091.672111] [] worker_thread+0x126/0x3c0 [2069091.686057] [] ? manage_workers.isra.26+0x2a0/0x2a0 [2069091.700033] [] kthread+0xd1/0xe0 [2069091.713891] [] ? 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 Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- 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