Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp675459pxv; Wed, 14 Jul 2021 12:46:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzDGq/RoOoC4Fw6qLHNOjazDxp2s1eTrPvCpGxgOHe6DDH3CWsanQbMSUjhGBrA/1ZM46QF X-Received: by 2002:aa7:c6d4:: with SMTP id b20mr15812437eds.204.1626291985824; Wed, 14 Jul 2021 12:46:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626291985; cv=none; d=google.com; s=arc-20160816; b=eNED8nypiUhZvQZB05tqqPFvTnw26/ClFjNhZvI0in7llPMA8q11g4fY96hztwD6Uf 9vBXCch1k26pWRpHP0SIf2xXzAVZSUORl+BuP0n/pZ//0cIcwJcCqCK/AUKHNw8W+KvH q/SfNkZ2dIyC6eVCHesgMhCgPF3Q0FGLvusPSh+l/KU7zcPM4xP9g1By0Z3WCYh36wix 2k9aZDyhg66ByV0c6GH/SEd11kiSTykKKZbU5gLeLTIRusR48ApV9WrkwYF9M28S1KQ5 4WbmxZZS2iSEwQiTr1SzN7S74gOlVkvWHGWH864MUajX+xFVfLyAPA6QPC6B2X9b0Hxc jTTw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yN8NhB/am2gOB/+3yWSCW4c92HduiOb+dlZ5Bs1Wcms=; b=VKlxEX6zfGiOv0tiBH47yab4shblAdAs+cC2az1cF5XZ07O/p4sf3ZO07f9CbVxaz8 FTfQT2auofZheCFZ2aUrgxS/0fGtTpFemN/ty2GqJz63DaseWFWQDci9Ic56dfCWup0M Wa6DdwJp4QEPznFdF/pbLS5mIKsB2PEpFG/1gKtuCaaU09KWj+WOrir33AerxVcdDJs6 5vpJVFzRWthn9DF7xnGAyWktee4PXOzh91o7NB5Fc+ZNDABBF48mUz1KwqpLtocWzvJR KbmzW+JzhuHwh9AANo3he+ZT03yswXGkCG7AMWJ+YGngrl7WI53oK0NIMzw9mPz1DIsO 1ZSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="kbRSIsK/"; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s22si1100232ejy.147.2021.07.14.12.46.02; Wed, 14 Jul 2021 12:46:25 -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=@kernel.org header.s=k20201202 header.b="kbRSIsK/"; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236601AbhGNTpv (ORCPT + 99 others); Wed, 14 Jul 2021 15:45:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:37912 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234875AbhGNTnT (ORCPT ); Wed, 14 Jul 2021 15:43:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 27AD3613DD; Wed, 14 Jul 2021 19:40:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1626291626; bh=oKjWj7Onv+W+k1uW4T3TWlfaX1bu26QRsVcZxGXlQgo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kbRSIsK/XnxOv9L4RgoHsOyUN2MMe0KF5/EaV9IFDalFJbmzpVS5peNlQ+JYnW7J+ /A4Ktj5ma216iACAJ84W9oCRV0Q08tG7sz3vy0dbWrfqLntkPQI059+B/NJTB1nfr/ ze7Pf9Q5paCRDiMxwlteC/UTA3KXnJXLoUublzDIp9HSywcPlyhjQEuPGhuS1lInrm Ls1qTvXDyakigS3UjlvfmsM+Bqx0coxrbFriBPcYVeW8JzSNnWdEwcEUpZIkXH1SLQ FeVnBUJdONxHVuDkivQVl1eGtNdKp3WhPjy7bX93fJSCmJv3/jYltsHw6oySLMKIVx Al6PQFwyOOo+A== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Javed Hasan , "Martin K . Petersen" , Sasha Levin , linux-scsi@vger.kernel.org Subject: [PATCH AUTOSEL 5.13 102/108] scsi: qedf: Add check to synchronize abort and flush Date: Wed, 14 Jul 2021 15:37:54 -0400 Message-Id: <20210714193800.52097-102-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210714193800.52097-1-sashal@kernel.org> References: <20210714193800.52097-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore 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 4869ef813dc4..63f99f4eeed9 100644 --- a/drivers/scsi/qedf/qedf_io.c +++ b/drivers/scsi/qedf/qedf_io.c @@ -1520,9 +1520,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; } @@ -1538,6 +1548,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