Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1540612pxy; Mon, 2 Aug 2021 04:28:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyrtxVt+i3J9pDlqwHjfNFjPZ9Zs2HO6+7i3M0gj5VXQcJrvwPZAXBIJXo2oeld3eNAORyu X-Received: by 2002:a92:db4c:: with SMTP id w12mr1308379ilq.306.1627903700296; Mon, 02 Aug 2021 04:28:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627903700; cv=none; d=google.com; s=arc-20160816; b=ZxHcQBwmdb9PTidaq2guIJigE0zd/xdmRCxfU8BHK0FGOp+jJveWDVbkUOvgbN01G+ lghXkn64b86/eNoFf/Wp+CvznVuum6Gc0ICrtQe7zylqzGCiyZkXs66vczVUkMJql63X hV7ciPJueWZxXw31qakgui3TrhH63IHNkMo1jKgImNeYvi7648/1Xyudlq2TUFsjRAtL NgiIJtA6oE5JYFHnDQlntBZ92G5o8xzyMWDI5ojFrLHQK+Ne/mSyrJVPsw36dccWa49N tJvUDmzNA0EOn5Lo1x5PZwbUeZwaPAXnP+WcAm35bkNr62MDz0VNsfRiVJyHxG1KEP5Z qjUA== 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:dkim-signature; bh=vuFuvhKlUfFYXf6FmlE9wh0koABi63V3tWPF92dXgDs=; b=ApSS9M+lmqaYE34Ho7+bSDr2bOlOQHM0t1vm+Av3IRotTJfcClqFZ4k0E6gzXhDhEP rUvZeT+/XYkgm7nNfZf7hQ0Rqsk21jL4tVo+nXetuCk22fMgdhjDrGgcZe/QjRDN6O6U yXRu34ztBlFmvWSibAUO+VkDeTn/ZW0RSTs112n4XiraU4FgX4XaDYi+JhLXrLYB1i7d xabcmEJs9doZkMn9eOpNZO++1PGkBTXBmc6ljPIkG2BetOhFDm+GUgkmyLbzwwuWgJ/H Gmeh477mrNz30l+Z82Ym8NlqfjD208a1wQYGYwnW+lbeKFjzf+avvC7FSAYNbgPpn+OI ASVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=T+MCcYPZ; dkim=neutral (no key) header.i=@suse.de; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i16si13149416jam.109.2021.08.02.04.28.09; Mon, 02 Aug 2021 04:28:20 -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=@suse.de header.s=susede2_rsa header.b=T+MCcYPZ; dkim=neutral (no key) header.i=@suse.de; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233516AbhHBL1Y (ORCPT + 99 others); Mon, 2 Aug 2021 07:27:24 -0400 Received: from smtp-out1.suse.de ([195.135.220.28]:37090 "EHLO smtp-out1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233382AbhHBL1S (ORCPT ); Mon, 2 Aug 2021 07:27:18 -0400 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id 1542F21EED; Mon, 2 Aug 2021 11:27:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1627903628; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vuFuvhKlUfFYXf6FmlE9wh0koABi63V3tWPF92dXgDs=; b=T+MCcYPZkMEz3giv6QkqVZ1zrxfHWKkAC2gT3JhJf7eVaG2+2yvvod+t/C5LZxwiO/NBtS YuUXvL/fXmi/4a/D2O2/5QXWnJpyMF0iuoVSjmt0UHaKxeklDfGUpIll2CU6wDxcfgDCTo iVUhQtOw+W90Vbu0/PAU7ZOKaiQX7P8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1627903628; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vuFuvhKlUfFYXf6FmlE9wh0koABi63V3tWPF92dXgDs=; b=IF7WxU6P2YZflUcw3M5+xTBNQ5tqbzJJZma9sxSxUo/Ry/G4P3Na54uVIgiZP8sXs2PYD8 kCXgGf0+VMdcZ/BA== Received: from adalid.arch.suse.de (adalid.arch.suse.de [10.161.8.13]) by relay2.suse.de (Postfix) with ESMTP id 00E2CA3BC8; Mon, 2 Aug 2021 11:27:08 +0000 (UTC) Received: by adalid.arch.suse.de (Postfix, from userid 17828) id EC323518C0B0; Mon, 2 Aug 2021 13:27:07 +0200 (CEST) From: Daniel Wagner To: linux-nvme@lists.infradead.org Cc: linux-kernel@vger.kernel.org, James Smart , Keith Busch , Ming Lei , Sagi Grimberg , Hannes Reinecke , Wen Xiong , James Smart , Daniel Wagner Subject: [PATCH v4 6/8] nvme-fc: fix controller reset hang during traffic Date: Mon, 2 Aug 2021 13:26:56 +0200 Message-Id: <20210802112658.75875-7-dwagner@suse.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210802112658.75875-1-dwagner@suse.de> References: <20210802112658.75875-1-dwagner@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: James Smart commit fe35ec58f0d3 ("block: update hctx map when use multiple maps") exposed an issue where we may hang trying to wait for queue freeze during I/O. We call blk_mq_update_nr_hw_queues which may attempt to freeze the queue. However we never started queue freeze when starting the reset, which means that we have inflight pending requests that entered the queue that we will not complete once the queue is quiesced. So start a freeze before we quiesce the queue, and unfreeze the queue after we successfully connected the I/O queues (the unfreeze is already present in the code). blk_mq_update_nr_hw_queues will be called only after we are sure that the queue was already frozen. This follows to how the pci driver handles resets. This patch added logic introduced in commit 9f98772ba307 "nvme-rdma: fix controller reset hang during traffic". Signed-off-by: James Smart CC: Sagi Grimberg [dwagner: call nvme_unfreeze() unconditionally in nvme_fc_recreate_io_queues() to match the nvme_start_freeze()] Tested-by: Daniel Wagner Reviewed-by: Daniel Wagner --- drivers/nvme/host/fc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index 133b87db4f1d..b292af0fd655 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -2486,6 +2486,7 @@ __nvme_fc_abort_outstanding_ios(struct nvme_fc_ctrl *ctrl, bool start_queues) * (but with error status). */ if (ctrl->ctrl.queue_count > 1) { + nvme_start_freeze(&ctrl->ctrl); nvme_stop_queues(&ctrl->ctrl); nvme_sync_io_queues(&ctrl->ctrl); blk_mq_tagset_busy_iter(&ctrl->tag_set, @@ -2966,8 +2967,8 @@ nvme_fc_recreate_io_queues(struct nvme_fc_ctrl *ctrl) return -ENODEV; } blk_mq_update_nr_hw_queues(&ctrl->tag_set, nr_io_queues); - nvme_unfreeze(&ctrl->ctrl); } + nvme_unfreeze(&ctrl->ctrl); ret = nvme_fc_create_hw_io_queues(ctrl, ctrl->ctrl.sqsize + 1); if (ret) -- 2.29.2