From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60E28264A99 for ; Mon, 24 Mar 2025 17:49:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838575; cv=none; b=cztWT2gnixuWbD06fPR4OnnHIhevZFPaWlN6KIkxIRFNop2b9KeyVvJUqwDibcTOpjgzAI4z0GaqW81cRGvWO/UbR2mbitT+3NOuHnFHnqkHRbd32tPm4Bw6CgaY4tEsSY1XWGonLzXlmvYWHmu5DA3tv5jq8YH7PDsuhT2UJLc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838575; c=relaxed/simple; bh=4j94bufT7HnwQcprsQZX1+HV8cxX6mI4SaZRbmV9p6k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WiNyKpgujn8h6NVtqLY2uHYVrjrt8yvpg5NlxHBHFC1SkVQyQz2HZJDhqFZEcxtX5wl70cASYsWzmshbs3fwdw43ombrF0wIPgxV14WiEajNTTa83jAvW2QSMJSMCjLNBDjS4zvBEW1nm6G8nk0/KgWM3pulxMfOFjtLFiS8k1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Y8lB0HyE; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Y8lB0HyE" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-2ff615a114bso8420181a91.0 for ; Mon, 24 Mar 2025 10:49:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838572; x=1743443372; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1sv49oDN1xKsV2NUXgnCogWe3PpX1iIJir56ZLLLVGA=; b=Y8lB0HyEQRH2fiQvYjCCU6WO8OlmOeXdrPO2krkvrrYIvgWt6jS5AHFzks5+cTcruP H/GJ8CbIgVusbbzB/yzXVeC/kx2FV1jZ+WAg2JvrZt3He4ENKRfLui/1i9cU1SOhphTr p6AqiYSAiq2GuDGL5brj3we+ekK1jyfl7smjUh3pSazYDv1zL90R9yq+H2SDuPqDGkzm FeVMc4gEivtfKnXO+21Czhscor+jN/mZUJNEzL+zqdnyOcYuMKOXPB1i5YsWAlofrY1V XWlg6F9osZK7fesAvC/eIG2ZfBrGU93ZeRsa/d/k6UvEX9f/DiU87eCJ0pnYSYw6vYaI vCwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838572; x=1743443372; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1sv49oDN1xKsV2NUXgnCogWe3PpX1iIJir56ZLLLVGA=; b=gZBw+ZmXZSCSpvThY6yMpbRAIcgsNaeGw7gYrOoQHePv/QszY6WuYGx3oY5g2Su+/c GqEW54VzY0ESTGL7Wou1wH1B2UvOjiGKFm59YEBqSMONRaCxgK+mSjQfXsP31h1/LTuW TEsLjMUAAQGdSqZlks39lyvqA4u/ebRuUBC+LCp1LE9pVKsD7GH3KCsaqhquYOMSsOGE 3aKy0xpZOSul0H67IkX7vx/hbKGaeZq1w6GVQg4BnLPoZBlbVmtW1Qc4EsmaX+hn5UYk c6CEqmxfiXZFJJSyosFj4NqPqbVYDmRZp0LnHZFeucoylm3zwrSC6EXDf01TI8eXgZPB 9QHg== X-Forwarded-Encrypted: i=1; AJvYcCUcIIm1xp1C57rKVIwGIyEm8ttxr0pKDgXCi1ZTIvPw5fD923nUKFgeW9wm+aB5iQw4A4x3k+grpPbdjLI=@vger.kernel.org X-Gm-Message-State: AOJu0YzW+oC2603k/br7UCNiV+zzuf/XHQ7P4q2aGcWzT0QnbxeDvHhL aYpp5myzf4D+zZatQX40iGoOlmMhKgDQo++KYu0LYUlLbAJWZkP0s6XRWI6gJvo= X-Gm-Gg: ASbGnctQ2NFq18wIlgM7Bq3YJzzxAQtez6RR6dnRkQyWEUXKEZzjYZcH2opEdpEQ4AG pYDWtx9910d0Z9RNj0pMlnLFe3ieYN/efWosXd+qjHtJC7fgbuUFeETTq7Fx18Q02jfuIQHj3QW n+bJXEfTlwRiBD+eijk/zT/z9uDKoXRUcx4i4ZPewjWCUWthoIE/WLM3nEIEPNzBIPhHrlvhbb1 iPohhlI8UXhjJdU6eC7b/zh0fQmJb+m299TJDIv+d9vBTu3LdVtPbacF5tCM+VVtgPnVLeqz8lX DaRxYLwnvOWivahnar0i/pJhmpXIJykbwZDPZ6zDa8Qneri9kgHdO/rmZzcTGg== X-Google-Smtp-Source: AGHT+IEe9Qsrj9Tx3gawv4u8ZXOCtS9RKc+Qk59288o/J5HEW/yh9fX1sI/yXy0vvkeFj8ITzHdkKA== X-Received: by 2002:a17:90b:3844:b0:2ff:53d6:2b82 with SMTP id 98e67ed59e1d1-301d43a2db5mr29060034a91.11.1742838572358; Mon, 24 Mar 2025 10:49:32 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:31 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 1/7] nvme-core: Read CQT wait from identify controller response Date: Mon, 24 Mar 2025 10:48:54 -0700 Message-ID: <20250324174909.3919131-2-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jyoti Rani CQT wait tells us how much time in milliseconds nvme controller needs to quiesce pending nvme commands after learning loss of connectivity. Read it from identify controller response and store it in struct nvme_ctrl in cqt field. ctrl->cqt will be used later on to calculate the total time inflight requests need to be held before they can be safely retried. Signed-off-by: Jyoti Rani Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/core.c | 1 + drivers/nvme/host/nvme.h | 1 + include/linux/nvme.h | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 8359d0aa0e44..f4b3c6a42e90 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -3364,6 +3364,7 @@ static int nvme_init_identify(struct nvme_ctrl *ctrl) ctrl->oaes =3D le32_to_cpu(id->oaes); ctrl->wctemp =3D le16_to_cpu(id->wctemp); ctrl->cctemp =3D le16_to_cpu(id->cctemp); + ctrl->cqt =3D le16_to_cpu(id->cqt); =20 atomic_set(&ctrl->abort_limit, id->acl + 1); ctrl->vwc =3D id->vwc; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 7be92d07430e..7563332b5b7b 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -344,6 +344,7 @@ struct nvme_ctrl { u32 oaes; u32 aen_result; u32 ctratt; + u16 cqt; unsigned int shutdown_timeout; unsigned int kato; bool subsystem; diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 2dc05b1c3283..7a94c01f0f06 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -361,7 +361,9 @@ struct nvme_id_ctrl { __u8 anacap; __le32 anagrpmax; __le32 nanagrpid; - __u8 rsvd352[160]; + __u8 rsvd352[34]; + __le16 cqt; + __u8 rsvd388[124]; __u8 sqes; __u8 cqes; __le16 maxcmd; --=20 2.48.1 From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB5C826560B for ; Mon, 24 Mar 2025 17:49:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838576; cv=none; b=DQYgTbjLPbiyAp7nXoz82GNYfAH6VBVdXoiaZlQFJiMhUVpJe0u2SK15gQsn/I7wLs/s2QG4nUZ19CTfOg5L94INhMzMBdkF1YheUgMN7EsMxAU2fyQNeezhDI+Xb1KjAJTA/pXgoOtgLzASd/xX4nPUXbnEwoZJAKkOgxoJrcg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838576; c=relaxed/simple; bh=NvpKUbZByuSKW9bHafcSIFQL9GuEh4t49QLqLTJyTz4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YrKa0IFu7GBmtfcImDoN33AEir8T9SJk2SBx3VASe76lYbhYWyAOlxDOaMNaB9movjRJJ40Nz9hAuqnv9jI0bMigcjV+u/9IiC2AMFhI1RgnM0TR8bOk4YWdguONNk8j+ZcwJaj4EY/lG/2GqGYo6J1hmBs+Sj86nWixJgwsLtM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=dHhhIl5c; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="dHhhIl5c" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-3018e2d042bso5791835a91.2 for ; Mon, 24 Mar 2025 10:49:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838574; x=1743443374; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YGbQAwYC/qXzJVLkpejFk7xs3lICNMf5WqGsg+WnFMI=; b=dHhhIl5cXBHxTga1seF4G/mZXGF3IFk+m024SU/0WFjdYf1FG2CxFUjqHdkPLh+fWq 3jYbNV1UqReuWRTEMaV8lRGwsieP1CRMSsEBbrxTVDBEJNg4bKbeWL4wLuBh2FgtOCqB uApUZ7AqzBCsAQ3+BxIirCySLKgLpRj86r08vSICuORUn46BjmwPJmlmR3f6FES8APKf JtqeeLJ+cces4eujjKUx+5V0UVJq5lsYxEJh7Ov5e0t6dHA922wirvrtXC3Rhph+y/bC wOiOzrbk3gz40S8zQjNgzd8ZPJ+YgBlLp3Sx612peY4VYCbwrrclg3jgxQglCrdybhdE AG3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838574; x=1743443374; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YGbQAwYC/qXzJVLkpejFk7xs3lICNMf5WqGsg+WnFMI=; b=JJPX0L3ULZdldfvEh6nwupGc/pFZVLN22AkbMqgykA3Wzzm9snmaAvvHBgLAPqYVvf BuqDhqjADozaLTHjVCr4Cc/BOOx0lGF3DTeF+r+6vTYIcdNnVCozVtEJAeOU89NquKsB 0ACO9jg0hv/5/DW5QOkrVUHb8X2UvOQSK3h92i4IdCkgLs7sUKubC5lCA5haVgPb5gBj RsgNShGPeb2RlVYiDY9N7/8hZUzRz0imcTyWnloR/znWhPAvOXF44aDKAWkKeOOWrYPX fL3Pashzr6mjhcA0JDrj04QN4tTWjeqi5dkKFEEQckb7dGMpE4yTmzsWzhA7vWv0YMGS Jorg== X-Forwarded-Encrypted: i=1; AJvYcCVZJDJE/PIYmENWvuNKJhGabVtpU6vEAIIGea3+TvS7gP7eGkn9b7OL6V2tvhS+uwi99qaq8UzHGuC/bf8=@vger.kernel.org X-Gm-Message-State: AOJu0YzZu8mmjH4W//qjCmVbIjPumuPtneg/NpOIQ3eqqCqxvMqfHci7 RlnepKb6xWSQAnKxVCM2zXeITBu6sh55mgyavuqi7U7DWb8A35nLkDQVIdi5v7kH/AkSqInpVjp 2 X-Gm-Gg: ASbGnctST77boUKiju2IbgVxU7N16jVFugskCvgBhai8pjWTXCKD0i06pPlU5le1PYl s5D7KT5N2gI2EtQnJBQrFu3ZKYzVilKxiLeWIE9cppdPSerEU/hu61cjlY/0V+KpShZgGNApDPR LksDtN1Yao2O+QqZ0CWVX1PWVHykD9pVWKu2QmBbP5ybDeDhZkPV/KwX/PkXNteTjTxs9N1H6lG /cehb2rV2rstilHkYX5SLKeuf4F2DRBj/79/sXiYAbWf5suWpEGCAcbzkNMG0zxfbyB5xqGYfmD OSeE2nnHywQkwtpw76sqgTXr3DF89PE9EopSE5QntYbVuQ3Nl5g= X-Google-Smtp-Source: AGHT+IFSis3qpdLEBYFKAL4qcOoGMbvAJXOq+PxPYOsX78q8bD6vStLlrP+A0BFOH0+WadEkOtNfpg== X-Received: by 2002:a17:90b:388e:b0:2fe:afa7:eaf8 with SMTP id 98e67ed59e1d1-3030fe8bd20mr16478776a91.13.1742838573932; Mon, 24 Mar 2025 10:49:33 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:33 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 2/7] nvmef: Add nvmef_req_hold_timeout_ms() to calculate kato request hold time Date: Mon, 24 Mar 2025 10:48:55 -0700 Message-ID: <20250324174909.3919131-3-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" nvme request hold timeout is the time sufficient for target controller to learn about loss of connectivity to initiator and quiesce inflight nvme commands. The timeout has two components: - KATO timeout is the time sufficient for target to learn about the connection loss to the target. It depends on whether command based or traffic based keepalive is used. As per TP4129 the timeout is supposed to be 3 x KATO for traffic based keepalive and 2 * KATO for command based keepalive. - CQT is the time needed by target controller to quiesce in flight nvme commands after the controller learns about connection loss. Signed-off-by: Mohamed Khalfella Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/fabrics.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/nvme/host/fabrics.h b/drivers/nvme/host/fabrics.h index 21d75dc4a3a0..483823d430d0 100644 --- a/drivers/nvme/host/fabrics.h +++ b/drivers/nvme/host/fabrics.h @@ -214,6 +214,13 @@ static inline unsigned int nvmf_nr_io_queues(struct nv= mf_ctrl_options *opts) min(opts->nr_poll_queues, num_online_cpus()); } =20 +static inline unsigned int nvmef_req_hold_timeout_ms(struct nvme_ctrl *ctr= l) +{ + if (ctrl->ctratt & NVME_CTRL_ATTR_TBKAS) + return 3 * ctrl->kato * 1000 + ctrl->cqt; + return 2 * ctrl->kato * 1000 + ctrl->cqt; +} + int nvmf_reg_read32(struct nvme_ctrl *ctrl, u32 off, u32 *val); int nvmf_reg_read64(struct nvme_ctrl *ctrl, u32 off, u64 *val); int nvmf_reg_write32(struct nvme_ctrl *ctrl, u32 off, u32 val); --=20 2.48.1 From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2D7726562E for ; Mon, 24 Mar 2025 17:49:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838578; cv=none; b=BlR9ooNdUfM7PHHBpifYL/1eiPxLA3OopIkja6K4qKK1ZkisiNolTvSusVpjiedCfVomkIiLs6j9g8HDoE3hNqqHAPHBoZyIio2mJr4zcZnUAOGpNKIg7oAdPvu1GO8cgKg+z30uxYdGPLB55JZcXL3rBjvU0Spl3wHOGE5+pC8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838578; c=relaxed/simple; bh=UzopV+IBmkyiEOtBtpq3AqgbUxWZ5DRVETnY2cybrZ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nOpLugQhaS110d8KZ7I1MeuaMBeO3E7n7QfElc2Khx/P8AmWNfexpRnDaMjPs7eAlR15oC9xlzsgO6vZnb8pZ8lB8ZIzcoLKupgFxdw9VoZiQuEHimf/V9lPR4w/r+TKayYVUuanTSRhxdY32XmdYfKrgbroxdT+T3b7XinKTnA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=fyU7VxQS; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="fyU7VxQS" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2ff6e91cff5so8088564a91.2 for ; Mon, 24 Mar 2025 10:49:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838576; x=1743443376; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SbKikyrkuQKAbVcAqWwtL5MxvKjcnNKUJ4bcGpnldxg=; b=fyU7VxQSN4oQDs9YXf7JgkJIvrxiz3eQx+GRI6Ra7n6ul7wgoJgYv4N7HNnWhf4CXO RsevHsNOGhwMCPPw6iCt004ZO0BdtCooRJynw3GuCzCGkG2/0Td+2/Um9wm93OvJ0zUN V9MJnaW+bsjPK24pC/x2BCrbo5IIyZMLurLpLJnOSLgXEmVhY7z8TBUaVjY6x9R3HxiY uF3a2Werx+5gB8+9cmnUESssilmE+mSf8jFRluNt0lH6ERSvvsBZYRe0y2WGIXsuCk1w GRbNPHclpk58N2Cwz7Shv0qhrhdGlsMsjomPwNq4hERgYBSIqXeSpFZXwj7ekgws9F84 N69A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838576; x=1743443376; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SbKikyrkuQKAbVcAqWwtL5MxvKjcnNKUJ4bcGpnldxg=; b=w07JdNPnKNxlU3oGhRcKNUxrS6Bi9GQsqmKCzbEc8/WDJ7+mebNV73cXDbEc6ZDbFr M6D2BgzIf9Iffok5W4EyxF9dra2RlVHIEMseOhjQ+GKhzdsO5LOa4oYuMGnJnDIf5t2h rZ/dbYn9jQC/KFBom3VTQhnz9O+QW29ma3de+7AWWyHyDi3O8RMPUPb8xBfix+PhPZep scCfWzkVOXYpKHlCnhEAYhjy2t2XU7CTDGkESqvi61rKdrGFVB555Is7jjQ4FMomXkWW lwuxCeMUFBMEBH/E3JH786GBfnCj65fG8XGNGZSjzyXpkzA5SGISso2qYjU7A/McX+U8 XgYQ== X-Forwarded-Encrypted: i=1; AJvYcCWoP7QYCfgVKUS4lWMut8jv8UxrWXJcgHBVLr72AhE7VXBNIlW0JCM/x0sdXe+GUHaNrlRSMPwlVs9QP4o=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3AH8HmwupVKk8sYP94TXq9FZPdNFR7xE0Wu/o0zn3eaZQmwez LSnqqiKbjLfQPlP+Kg3VKyBPqtXgYWuKkCVtTK7osx+1y1Po0wYLTsxr9bSbnlQ= X-Gm-Gg: ASbGncu2zT5MFvxEjGa7jtm78/Azxn0EuWsaOgzZP3bLnKr7tealinX8n4Uge8me+cq lpj/4PUnJf3Kv2XJJ0/p3OGwQYE5rzO8fqg9wQ5kiRf/460PiFFksuDnqv2qAfdENsyGOVDyfdq 1pUHB5xUpD3EEctKSjHLZvginqEBj94uPo0fdLK93cwgFE178gq1PCeWoPI9a/qEVBEk3UibTkN hNVBUfkrGN554TV43o+lo3qWL27D01+0JEBZGi9kZWkOtp8+dxKiO13Io32jIlUJ+LEoWh738Dg /6aHnF9cbh/0uUT+JdTBL53V40QJRoz8o2CO3uIrotSO4M4lTa8= X-Google-Smtp-Source: AGHT+IEa1vT6cpVDLe0ags7PxHVLo5gJ1K8CS9xAHU/xWCcEk9aWqc+j3Ou83FOXQmtPg3nh0oY0xQ== X-Received: by 2002:a17:90b:54c7:b0:2fe:dd2c:f8e7 with SMTP id 98e67ed59e1d1-3030fe94fe8mr22634637a91.10.1742838575561; Mon, 24 Mar 2025 10:49:35 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:35 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 3/7] nvme-tcp: Move freeing tagset out of nvme_tcp_teardown_io_queues() Date: Mon, 24 Mar 2025 10:48:56 -0700 Message-ID: <20250324174909.3919131-4-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update nvme_tcp_teardown_io_queues() to only tear down IO queues. Let the caller take care of freeing the tagset if needed. This change prepares the code to inject the delay described in TP4129 after IO queues are tron down and before IO tagset is freed. Signed-off-by: Mohamed Khalfella Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/tcp.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 327f3f2f5399..d12b51ed1a9e 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -2271,8 +2271,7 @@ static void nvme_tcp_teardown_admin_queue(struct nvme= _ctrl *ctrl, } } =20 -static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl, - bool remove) +static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl) { if (ctrl->queue_count <=3D 1) return; @@ -2280,10 +2279,6 @@ static void nvme_tcp_teardown_io_queues(struct nvme_= ctrl *ctrl, nvme_sync_io_queues(ctrl); nvme_tcp_stop_io_queues(ctrl); nvme_cancel_tagset(ctrl); - if (remove) { - nvme_unquiesce_io_queues(ctrl); - nvme_remove_io_tag_set(ctrl); - } nvme_tcp_free_io_queues(ctrl); } =20 @@ -2417,7 +2412,7 @@ static void nvme_tcp_error_recovery_work(struct work_= struct *work) =20 nvme_stop_keep_alive(ctrl); flush_work(&ctrl->async_event_work); - nvme_tcp_teardown_io_queues(ctrl, false); + nvme_tcp_teardown_io_queues(ctrl); /* unquiesce to fail fast pending requests */ nvme_unquiesce_io_queues(ctrl); nvme_tcp_teardown_admin_queue(ctrl, false); @@ -2438,7 +2433,7 @@ static void nvme_tcp_error_recovery_work(struct work_= struct *work) =20 static void nvme_tcp_teardown_ctrl(struct nvme_ctrl *ctrl, bool shutdown) { - nvme_tcp_teardown_io_queues(ctrl, shutdown); + nvme_tcp_teardown_io_queues(ctrl); nvme_quiesce_admin_queue(ctrl); nvme_disable_ctrl(ctrl, shutdown); nvme_tcp_teardown_admin_queue(ctrl, shutdown); @@ -2447,6 +2442,10 @@ static void nvme_tcp_teardown_ctrl(struct nvme_ctrl = *ctrl, bool shutdown) static void nvme_tcp_delete_ctrl(struct nvme_ctrl *ctrl) { nvme_tcp_teardown_ctrl(ctrl, true); + if (ctrl->queue_count > 1) { + nvme_unquiesce_io_queues(ctrl); + nvme_remove_io_tag_set(ctrl); + } } =20 static void nvme_reset_ctrl_work(struct work_struct *work) --=20 2.48.1 From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F2ADC265CA6 for ; Mon, 24 Mar 2025 17:49:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838579; cv=none; b=R3bZRm4pXtp1fEEUwjPRqMPYtgjMySqM4U0aG3qXpWarhZBNV+dhqDTr7WiMdzb3WUmJxtxRqMGiRkO09S1+KKWAnV/0iYrMRmVDQtbx9D5qieYdDmNWLRTi9FfPy0q8ilogfP71Im8NxzwNzHIW5L4rIeHI0USgNpjsNJV0EAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838579; c=relaxed/simple; bh=6Tsal6dbPDFKDA1fRnQtE15xj90d72GiBpu7tB6EoDY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mLkk/FhhGzh9ku5nttLsaClKMpQ50R/QyyPQf0MjLYmjY4ZnDVJjJXDBd6UJiNCHSdvDpf84sMXnGz6mNsfPd2PjuNE89i5R5bLNKgSdjzUMeL3abSfY/5X9CPKtE7MBWb0Ze/cYj135nssBbv+uhSyf4G03Nj30O0rWgN47Lek= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=JkNco1Lo; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="JkNco1Lo" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-2ff797f8f1bso7816458a91.3 for ; Mon, 24 Mar 2025 10:49:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838577; x=1743443377; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1tXONZUZjibgEYj/WgZOKQeD7z/HbOhxU4kuAFBXA/g=; b=JkNco1LoIpn26wv51QRCoBH5wueOJvYPEdrMb+sKMNTX0aOQEiOR8olbiN9WyWWWZO 9I8J7HM/QkAUIHtvMxtd/SpdNGxQNesBPrxUHbZ/hliGc9nUU25QQi35e+YTq+zEDm2F lvWb1y6QAimZcXnyMVkx+4wU6K2UuLwrh4QD/nt2IS7sjAYVmfo71tQ2sujIw0qdYl93 E3ELMaK8b64dFbee8OYE8G/Bw5OMzAcYNtFsLx8Z9XHm6Nl4DDAvfjJ7U9y/0evojPH8 03qwsvqukBg/QyhxkL8piosQ81/fqyRgryTNhjVAMxotiaxW2sToUCjA7RDcJlmRSOB8 iUDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838577; x=1743443377; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1tXONZUZjibgEYj/WgZOKQeD7z/HbOhxU4kuAFBXA/g=; b=p8nS2Vmw9vQ8SB/wfdaOh/XQBUurd+q8FrKNiONdWqX5hSCW5d6XiMZc5ftFVfdsE6 LgFVC6epMDS4XtjwvqCrwqOudFSa18ndDaoOUL3XHqaN0lPb4y8Yvtk+pDGlHlCJSBO0 GFBiXIUoer3b6d11lTXNVbvZqpT5L3/fy0JEvKj8/NPEAcbIatXqKrZ76pJe6Df0WMxG 8snJ5HdtsIMT0WgsFvnERbv8vJJx0+Ol0YahTdz0QcGYPeMtD3Hlh8htuC6CpKHfTbI/ LMYza6wPyewNgm19ZAfoASqmoQilGFbu2wM4MnFBEOmh9+4nqzp/cFhJbDckd5R+Xl34 njCQ== X-Forwarded-Encrypted: i=1; AJvYcCUARld0N2uoFe85U3lMwnz06N/cAMN2tOwjO9L31CkZ1smCxV8lD18NVPTTLwJLuAtekgr8gZOK66EmrCM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9u0S7NSYv2w1DPOVSsFAFJ9bjIYd3MbMDDpeArueQQ6xft0DX Kzp2RTZyrU/h1CubHXNqcdyUIh7AV5dFmEfSin8LJnELR1cOMzoDYy7finf8Jb0= X-Gm-Gg: ASbGncuvuGCgIhsPOFV3GuHOmxmuIX0L28/IK4Sd1/7uiEN8jD2Rq4cECWUg/mbCYOR YRIKSbKbWiPz5jqNgr0iSGgR/lck1XslMrLGuTptMGcCjnJx/A6Sggi/Neu9MibyU2cL+2WquX+ IoVbcuRmIIQa06gOn/pOys0mLeGT+R6QfysHjftybXFSmDZUEE6oc6sRaZ78I/56/JXSVcluTjm 8G4rjjzUYX2JNOGfJylNiigYXj5oynG/TarItZ4onL/+WRDSBjN6XsTd5/ITOEj77M/ZCkquEZt tsy7Z5wnZDjHX9gykGFJ5r1tM+GvEIeqDH6CTEhBfjgk7GTG1PIGDRTcnV97OA== X-Google-Smtp-Source: AGHT+IFbL79g6cqinOTtCUsCU8CN6KpUY9mimdkEF3cRlYokJ0E4qTs9zViNVaPRI+5PA8mVOPtiCA== X-Received: by 2002:a17:90b:1dd2:b0:2fe:9e6c:add9 with SMTP id 98e67ed59e1d1-3030fea2e9cmr24583048a91.18.1742838577140; Mon, 24 Mar 2025 10:49:37 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:36 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 4/7] nvme-tcp: Move freeing admin tagset out of nvme_tcp_teardown_admin_queue() Date: Mon, 24 Mar 2025 10:48:57 -0700 Message-ID: <20250324174909.3919131-5-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update nvme_tcp_teardown_admin_queue() to only tear down admin queue. Let the caller take care of freeing the tagset if needed. This change prepares the code to inject the delay described in TP4129 after admin queue is tron down and before admin tagset is freed. Signed-off-by: Mohamed Khalfella Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/tcp.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index d12b51ed1a9e..99533ff1ea20 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -2252,17 +2252,12 @@ static int nvme_tcp_configure_admin_queue(struct nv= me_ctrl *ctrl, bool new) return error; } =20 -static void nvme_tcp_teardown_admin_queue(struct nvme_ctrl *ctrl, - bool remove) +static void nvme_tcp_teardown_admin_queue(struct nvme_ctrl *ctrl) { nvme_quiesce_admin_queue(ctrl); blk_sync_queue(ctrl->admin_q); nvme_tcp_stop_queue(ctrl, 0); nvme_cancel_admin_tagset(ctrl); - if (remove) { - nvme_unquiesce_admin_queue(ctrl); - nvme_remove_admin_tag_set(ctrl); - } nvme_tcp_free_admin_queue(ctrl); if (ctrl->tls_pskid) { dev_dbg(ctrl->device, "Wipe negotiated TLS_PSK %08x\n", @@ -2374,7 +2369,11 @@ static int nvme_tcp_setup_ctrl(struct nvme_ctrl *ctr= l, bool new) } destroy_admin: nvme_stop_keep_alive(ctrl); - nvme_tcp_teardown_admin_queue(ctrl, new); + nvme_tcp_teardown_admin_queue(ctrl); + if (new) { + nvme_unquiesce_admin_queue(ctrl); + nvme_remove_admin_tag_set(ctrl); + } return ret; } =20 @@ -2415,7 +2414,7 @@ static void nvme_tcp_error_recovery_work(struct work_= struct *work) nvme_tcp_teardown_io_queues(ctrl); /* unquiesce to fail fast pending requests */ nvme_unquiesce_io_queues(ctrl); - nvme_tcp_teardown_admin_queue(ctrl, false); + nvme_tcp_teardown_admin_queue(ctrl); nvme_unquiesce_admin_queue(ctrl); nvme_auth_stop(ctrl); =20 @@ -2436,7 +2435,7 @@ static void nvme_tcp_teardown_ctrl(struct nvme_ctrl *= ctrl, bool shutdown) nvme_tcp_teardown_io_queues(ctrl); nvme_quiesce_admin_queue(ctrl); nvme_disable_ctrl(ctrl, shutdown); - nvme_tcp_teardown_admin_queue(ctrl, shutdown); + nvme_tcp_teardown_admin_queue(ctrl); } =20 static void nvme_tcp_delete_ctrl(struct nvme_ctrl *ctrl) @@ -2446,6 +2445,8 @@ static void nvme_tcp_delete_ctrl(struct nvme_ctrl *ct= rl) nvme_unquiesce_io_queues(ctrl); nvme_remove_io_tag_set(ctrl); } + nvme_unquiesce_admin_queue(ctrl); + nvme_remove_admin_tag_set(ctrl); } =20 static void nvme_reset_ctrl_work(struct work_struct *work) --=20 2.48.1 From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90279265CC6 for ; Mon, 24 Mar 2025 17:49:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838581; cv=none; b=hRub8hoEEPb68ZBR888nvoAS6o4BINVDXkigbaJ2xU1G05aDNksCe9h5VenmTYlC4y4xD0KJ8NUdhRR9XN2Htoih1dC5sCsqunpDRrwu+S+WayGzHO3a4+ambAl/CAV17+3ppY/h+AURWAOHYfWtlwOpEXUUgf4BPicFVCpWfWE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838581; c=relaxed/simple; bh=R7JqBxN8V9FjabLupUaJBqhvpFGaXMiTK39i2yzUq/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bPyiLKH109QvAxDBTczGYJIWP9HUA2WnVwJSgmqKwEdZagvAiLwBPhro1MT5VaJOqB25Bgo7c72pFWO17HRyGuQ4W+C8SWKxpq45xJkDpTsLfrPpio/ha3QAl6m55pQPL4Gs0C4AAE8WvC4l3j8CV7aO+K7W9AFs/Fn36XC6bic= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=W3MrjqMJ; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="W3MrjqMJ" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-3014ae35534so7276562a91.0 for ; Mon, 24 Mar 2025 10:49:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838579; x=1743443379; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zI9pTE09SEnCUUwuhvk6jLvhp0JjIoGziaSbN4eddKE=; b=W3MrjqMJT+7wSwaa3+xRt9bI9aIWUA0nbpRTVL6ahdTvBJ+bq+2UO3Qa9rdI05c5+L lq9BV5Zr7qnmK/gWBe9Uu0OuYCqjYiGbz829GwE2jXRZQeTw86oY7SLXiz4VlozYPbXj +BAI2Nt4JQInEMT5YDGRpxDUtQ6fW/aiAteycMSJVD5hsNRd0l2NuVDoTd010iu4Cd8M iM3MzMc1svjUAI8KWkxHZGEBeIuf//mg732t9ZzEhI5gB0zQ/vk/JPMRA87AQv/09tem zfBvP1Y9k9J/MdSb0qeJRmiI4unJJTXVcV0+NX7TBp/pU4Y9ecteYBudBIgHvcSCySKC 0Bow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838579; x=1743443379; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zI9pTE09SEnCUUwuhvk6jLvhp0JjIoGziaSbN4eddKE=; b=Oqr57GwKNJ+WbTjMQMzQ08nsr053sPGoFxTW5wbFtnhx5CIt8IcTrDjFpmYm7qlEdj kcItgz8I9f60SuMdMyS4/S9TGfhpJvsl3lNpgbkrQXXVl55fKIFJNUpDPJNKn9MaPLr0 FWt2Kra2fNQCqIKQxq76tWXKuGKJBhenIPI1kAUXp3VRPFWJDmNowLMLu6vUZ/Z8tZlh /nzbG9+5eHibj8rjA/RJ0oLE3eP5lOlkVBz0KzPzi7h89px8HlD3qz8gPt0THJ8CxsVW Oiy7Jr/iaR1HIldbUwBZ6TJgmdKPM5HkvNw2m6oJDis2Yir/15swOrnPSzs6SHOQz5Nv A3/A== X-Forwarded-Encrypted: i=1; AJvYcCX9Q9urfMKhhUVbwjTW14bSgw+HVgUcR2wuJUJ0knC/DlLQXvMN7O6Gc3WlbHqjgwUKlpBXwxKcTl7pWSk=@vger.kernel.org X-Gm-Message-State: AOJu0YxfVwsa1Q+tRSji+XbTXpbVrh84vEmXtiDwmka1/ozx+3KLdrWn Q/T3iapO8cn/L5VKm2TwuPFtrdkO9yKSbAscXICtIHnMrNkuYCByF4adf6+E7EpAOvAPiDcwCvI q X-Gm-Gg: ASbGncvx7LZcGoabx8wt7N1Ysd1QG/0UeJdn0h3wgabTsP5eOMB1mWkhgZcgFFrMA5J HbTNhNp2FY7lo7WNbAp1Dne84csKmzNpIgO+ZyVm2u7WaP3vfBQr9Q55QUwwczH8e2ccfCiYiSc wBOCAEVVFprtuJjGWoLXRGk1AO/aANj6G7iANMoCZbN8pcWfhz1dd6yOZvtyga1cDb08ujhAauj UDvpk+iARIL8I/M3bYMfp+JNKB5wqH3LaMpEqfpScXPjdfC9HDN7p9boHdhESQ3CL8A0iQWw3uM 0bDPPPUa1H7vWDNJf+v6kd5IXncuuGhCJ6SDik9BRiYE8pxjXvY= X-Google-Smtp-Source: AGHT+IEizjkumELeU6R9jqpR3Ax4p0YRM++REqcaqTU4nNn7wsmzFTI5FqCg8QkO6jKcVZ9UpRwPhQ== X-Received: by 2002:a17:90b:5408:b0:2ff:6fc3:79c4 with SMTP id 98e67ed59e1d1-3030ff10972mr18601100a91.27.1742838578680; Mon, 24 Mar 2025 10:49:38 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:38 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 5/7] nvme-tcp: Split nvme_tcp_teardown_io_queues() into two functions Date: Mon, 24 Mar 2025 10:48:58 -0700 Message-ID: <20250324174909.3919131-6-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move code that quiesces IO queues out of nvme_tcp_teardown_io_queues() in a new function nvme_tcp_suspend_io_queues(). In a later change this allows us to disable nvme controller without needing to tear down IO queues and canceling inflight requests. Signed-off-by: Mohamed Khalfella Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/tcp.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 99533ff1ea20..327e37a25281 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -2266,12 +2266,18 @@ static void nvme_tcp_teardown_admin_queue(struct nv= me_ctrl *ctrl) } } =20 -static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl) +static void nvme_tcp_suspend_io_queues(struct nvme_ctrl *ctrl) { if (ctrl->queue_count <=3D 1) return; nvme_quiesce_io_queues(ctrl); nvme_sync_io_queues(ctrl); +} + +static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl) +{ + if (ctrl->queue_count <=3D 1) + return; nvme_tcp_stop_io_queues(ctrl); nvme_cancel_tagset(ctrl); nvme_tcp_free_io_queues(ctrl); @@ -2411,6 +2417,7 @@ static void nvme_tcp_error_recovery_work(struct work_= struct *work) =20 nvme_stop_keep_alive(ctrl); flush_work(&ctrl->async_event_work); + nvme_tcp_suspend_io_queues(ctrl); nvme_tcp_teardown_io_queues(ctrl); /* unquiesce to fail fast pending requests */ nvme_unquiesce_io_queues(ctrl); @@ -2432,6 +2439,7 @@ static void nvme_tcp_error_recovery_work(struct work_= struct *work) =20 static void nvme_tcp_teardown_ctrl(struct nvme_ctrl *ctrl, bool shutdown) { + nvme_tcp_suspend_io_queues(ctrl); nvme_tcp_teardown_io_queues(ctrl); nvme_quiesce_admin_queue(ctrl); nvme_disable_ctrl(ctrl, shutdown); --=20 2.48.1 From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62E68266567 for ; Mon, 24 Mar 2025 17:49:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838583; cv=none; b=mL9eyl1zKXjjAN2zZFh8j9i6fdDa2GmQ66pDKFEudWZa3ztO8PI8SEOWgWdZPf2c/bIqjGyVhSAWWQxDfod9eXzKrHvKldXJk5Be7C9IKeKY+Jm37YbuZKVVp4Rfx2MVdZAwzVPuGFObbde3/Qjg/PBGwwI+HuKgzrqOWW33YH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838583; c=relaxed/simple; bh=JnmDDcSLS273VKumaze2o0TCWurNnovdSvbi2PRkVqc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qvuRqeuOzRlFuWhb4Rury2566iLCZysxU+wZ1uLnaxoDC283mua9krOpKiSJUDIubl6KVPN4Prtff/1Q7qQwb7CLlVuK5xAssO13paRVofDXKzDhMpQ6ytOcXTO6LngsDjvqYeQYo/vRqqa49FvfE8k0CW/NlEtheOMa1XgB1kE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=SfuW2aaZ; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="SfuW2aaZ" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-224100e9a5cso90670545ad.2 for ; Mon, 24 Mar 2025 10:49:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838580; x=1743443380; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Yz2osXWrElalCzIio0fRrS4N7V336cnORYficYcWn18=; b=SfuW2aaZCUznm3bg6s5j1BWhfRWZn1b66O56e3V1kEqP03MZYdXueR4hmiQmdTK3KW i9Hw9y5gIKGrgqQjEEoi2i1/IjK2pwVS+C4cdexX7SKmdSkp53Kj+taK7fR6UzNhsAME s5nnSOn4DeUDOjklG7fO32Pn1ze67gbq8cIsTfrxDNVUt1Y98Ke2cWt6Qi4X+OBc+Uyp FsorsUbnDWO2LhqEjKjjl0IFf1TmP5LUcQ79lX2AxMTCs2k14wor3O8DNIBKc0DU5Yg5 Ar3o5D5OOI017dNL53rdSV3+J8xiskl19TWu9SGNn28FCvG0kijVLnF74GzNnzUdCJxt kwvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838580; x=1743443380; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Yz2osXWrElalCzIio0fRrS4N7V336cnORYficYcWn18=; b=I9Rs6+g96YU+LeLY9/m6nsSp+dL+dC0nmil2Tp6LsQIXGyESKT1qoW7pip6SiVjnIB 8LEZexHWcO02stYgL/cTEHFuJkLLhtSkzjxKxM21ioXZXZOZkxqDFDnC/PwuNBUtB7sC L5s960lng76fdhMbLhEgGOxkYqKoXoQktDqqeC6blK05ne60JbAkp4iioYEvECSHmJrM 59l7DDhR/N+SkQlXAFd81YGPfqoFlnt/bnbseTVOLw08Fstl/2XBjVcIeY8y4dTki8gN lk/eaE0RqjbfWEKBNldM6oME4BxIvv03mE/BU4tyi8oUPG2Ws4ECidGfvaH5rbs4hwPB hrUg== X-Forwarded-Encrypted: i=1; AJvYcCX5JrVP8V7Ap52Cy1Ag8b/UjoUnW3qMyZ7YzjQVc27c1nF+XdYPGmA+gJTQ0aH7DSJpY4/kqmGCY/ufXdE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3J+1Z5YuWx8FXpYgqD++sHdJ7M9gmqkcKeQoNWfZvP0weGRe0 in3IVimZn4TVnRBZzvJyeb4pUkW9v6atxmC78+x4Q6JNNaDoxxGYhBbiK6Kjd4I= X-Gm-Gg: ASbGncunK4tZ53mX+PbDAG1P1Xw1i0prSqeEEuN7JarlBy3t7jRKiwNgAmzbLZyOknq GA4ZEsZiPv3ES/f0TwQvIP9NqzgjRYGTveG0KiSti24Tbkfw6lCyriPvp+gGkaoL0EZFXzI/qlt Cvn0DKgJcE5hai3sZgFyrbbi1oqMU2fjiFfCMtCuHRZbU+EXpLT5GzC4RwqllsF29k33xKpyrqT tk+nxjQAxr8X9ZItQK/AwzvNcMMmBt7fgDG+oMdMMt3X+tFzYFnZrijOx32rkfnQlgKEfBFzkGy g6+/cgOrCQRd6gcS+j/xQB4biQCkb/jzR+Qsrp1xdVzqfcGS1H0rq12lLlK+zw== X-Google-Smtp-Source: AGHT+IEvbZLBkadN8enrTpfI1MaG14FFBTGvRXIEJ2kVCjGfPPoMyljKBkm92M3bmOxmimTtPebNvA== X-Received: by 2002:a17:90b:2647:b0:2ee:d7d3:3019 with SMTP id 98e67ed59e1d1-3030fe95343mr26865713a91.12.1742838580250; Mon, 24 Mar 2025 10:49:40 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:39 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 6/7] nvme-core: Add support for holding inflight requests Date: Mon, 24 Mar 2025 10:48:59 -0700 Message-ID: <20250324174909.3919131-7-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" TP4129 requires nvme controller to hold inflight requests in case of connection loss for a certain duration of time until it is safe for these requests to be retried. In case there are inflight requests held_req_work is scheduled with the appropriate delay to cancel the requests. Add the necessary logic to nvme-core so that all fabric transports can use it. Signed-off-by: Mohamed Khalfella Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/core.c | 61 ++++++++++++++++++++++++++++++++++++++++ drivers/nvme/host/nvme.h | 4 +++ 2 files changed, 65 insertions(+) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index f4b3c6a42e90..4170785ecf21 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -551,6 +551,65 @@ void nvme_cancel_admin_tagset(struct nvme_ctrl *ctrl) } EXPORT_SYMBOL_GPL(nvme_cancel_admin_tagset); =20 +static void nvme_held_req_work(struct work_struct *work) +{ + struct nvme_ctrl *ctrl =3D container_of(to_delayed_work(work), + struct nvme_ctrl, held_req_work); + dev_info(ctrl->device, "releasing inflight requests\n"); + nvme_cancel_tagset(ctrl); + nvme_cancel_admin_tagset(ctrl); + complete(&ctrl->held_req_completion); +} + +static bool nvme_check_inflight_request(struct request *req, void *data) +{ + bool *inflight_reqs =3D data; + + if (blk_mq_rq_state(req) =3D=3D MQ_RQ_IN_FLIGHT) { + *inflight_reqs =3D true; + return false; + } + return true; +} + +bool nvme_queue_held_requests_work(struct nvme_ctrl *ctrl) +{ + unsigned long timeout =3D nvmef_req_hold_timeout_ms(ctrl); + bool inflight_reqs =3D false; + + if (ctrl->queue_count > 1 && ctrl->tagset) + blk_mq_tagset_busy_iter(ctrl->tagset, + nvme_check_inflight_request, &inflight_reqs); + if (inflight_reqs) + goto schedule_work; + + if (ctrl->admin_tagset) + blk_mq_tagset_busy_iter(ctrl->admin_tagset, + nvme_check_inflight_request, &inflight_reqs); + if (!inflight_reqs) + return false; + +schedule_work: + dev_info(ctrl->device, "holding inflight requests for %lums\n", timeout); + reinit_completion(&ctrl->held_req_completion); + schedule_delayed_work(&ctrl->held_req_work, msecs_to_jiffies(timeout)); + return true; +} +EXPORT_SYMBOL_GPL(nvme_queue_held_requests_work); + +void nvme_wait_for_held_requests(struct nvme_ctrl *ctrl) +{ + /* + * Inflight requests can be held for a duration of time that is longer + * than hung_task timeout. Avoid hitting hung_task timeout while waiting + * for held requests to be completed. + */ + while (!wait_for_completion_timeout(&ctrl->held_req_completion, + secs_to_jiffies(1))) + ; +} +EXPORT_SYMBOL_GPL(nvme_wait_for_held_requests); + bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, enum nvme_ctrl_state new_state) { @@ -4846,6 +4905,8 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct dev= ice *dev, =20 INIT_DELAYED_WORK(&ctrl->ka_work, nvme_keep_alive_work); INIT_DELAYED_WORK(&ctrl->failfast_work, nvme_failfast_work); + INIT_DELAYED_WORK(&ctrl->held_req_work, nvme_held_req_work); + init_completion(&ctrl->held_req_completion); memset(&ctrl->ka_cmd, 0, sizeof(ctrl->ka_cmd)); ctrl->ka_cmd.common.opcode =3D nvme_admin_keep_alive; ctrl->ka_last_check_time =3D jiffies; diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 7563332b5b7b..ed8729f93ace 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -356,6 +356,8 @@ struct nvme_ctrl { struct work_struct async_event_work; struct delayed_work ka_work; struct delayed_work failfast_work; + struct delayed_work held_req_work; + struct completion held_req_completion; struct nvme_command ka_cmd; unsigned long ka_last_check_time; struct work_struct fw_act_work; @@ -793,6 +795,8 @@ blk_status_t nvme_host_path_error(struct request *req); bool nvme_cancel_request(struct request *req, void *data); void nvme_cancel_tagset(struct nvme_ctrl *ctrl); void nvme_cancel_admin_tagset(struct nvme_ctrl *ctrl); +bool nvme_queue_held_requests_work(struct nvme_ctrl *ctrl); +void nvme_wait_for_held_requests(struct nvme_ctrl *ctrl); bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, enum nvme_ctrl_state new_state); int nvme_disable_ctrl(struct nvme_ctrl *ctrl, bool shutdown); --=20 2.48.1 From nobody Thu Dec 18 14:40:39 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3145265CDE for ; Mon, 24 Mar 2025 17:49:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838584; cv=none; b=rTlHT+pZV5SjrXx6gDFhrrnWAjON0/Z4Zf9MqYI4MNCVtGRWHMy0MjovZoFTsM20RLNOFOXUxWOF8tnJ94ZH3ahyxaSo5l1u9UndnUk/CbXTDO5Or1NbzmepItsAJ8f8rURV5FbFONGXQqj3+453HucdSwyq9M1PUPbN5w/Ct/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742838584; c=relaxed/simple; bh=dVGPX7JGPkIN+0UvwddpfThGx7do2Vbuy+auXYK06L4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gp+7cbt05ut3oLw+UjeoCqI8icLIJmmCx/MH3v7BuanMzkpp9DSxpJ7R23ExgI7JHQVgqqQVxfHkG/6W/Fuko1FV4K6l/Af3linjjcqZNgNA7modY0xC24w6jX6dW9bfBtG9FZv5MTe4cC6aLwTuVv4fnxm9m2Q+FyX4SB7g96c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=eqdm2IRx; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="eqdm2IRx" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-22438c356c8so93251385ad.1 for ; Mon, 24 Mar 2025 10:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1742838582; x=1743443382; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pOiHfP9p0mlqSIoELkUxcyuZubPUyJkOsyllMOrSXD8=; b=eqdm2IRxN1n58gZiYHjzH8uoX2NpCnis1KxqTK6xLnlUpDdEWbtBxleMraE/ocRI4Z 6Va+M+/amSpTukfibyPr5pnz/gC5MGOutTMxB+VYmHl3nZyq2U08yNsT03ax12C2ThqR KeeFIhkzZdypK4bkd4oswkYzv9UWZTcaGZHZTs8FZ1uDF8xKkpzWJVN8PcnhOxFL9Zvs I0KkN0X2rsmDjGYU5Hrs2vbxGQ6QRF0E9bRLBOXt20JWiNxyb+ghcdFxBmNi0ovIh76v w66cY6wGbifALFIUzahjrHhdVoGK0aIqyQsEd2eLBzZRBQClQ6ToqqzGASuQ1VqVf1oC 5nQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742838582; x=1743443382; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pOiHfP9p0mlqSIoELkUxcyuZubPUyJkOsyllMOrSXD8=; b=h4oN1a6PnJlQtug8dPfrzOeuqUQqJcydilxigB9w8vxFZDVToOtbiCylreRsfCrRKr EdhasNnFscf7KYN9HNjG9k/M4zKKypuPde7Kdtbwqe+lSpQLab4ZWEMbcfZMwYuaivgi WIW5KLh7zSrDH3lDlZfuw//cmQNwyaCohvAEi7qxnONeqThukD6H4C8KNcpJaZBSKiDi 7TgefCbbjlrcUWN3dK2GpJ7I9D2Jng91kCfaLa3rf1QrkWTSO7KfSBprYVRQKcGz5nQ8 3+gCOAodBEx5CFqkBdwJT98xoJxQYLw7XCgRWE98CwazeIXXevftoIJYgYZ3PdLiTxhX 88FQ== X-Forwarded-Encrypted: i=1; AJvYcCWazRUFSPwKonVQt11O2mKzWgD86lf7lHPBpFmI32EtDJoP6gxvd6LVe45ZdndInB/Afc1pHQ+PoYoGbsQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1oCeHom0crGAhlJzN+rSEuhG40NSx1ZuYwO01ojAauaaGfQt3 it5zhreZ5SpKBUTT+ZkjjQn7SB/Ez65jKj4Br9HLOx6qRsW1G9D3nXbqofIYium9/YCZXp96vCg h X-Gm-Gg: ASbGncuHuYPUMX6MYF4KnQP47zQaaCm+kUpE8Hi1+hoKBCc3yOvhRGfqUk0xC0XSdwi GRx1Q21KQ68VHQcVaDMRzAsjntEKtphBrmd/bp7YBk3c3ssAZOZB+p4+zC4zYsRQM/6uwoqMQgR hBRArDuvomXUk/I8tYevq39LbF4+cqXepmwSEYYcOLiamX8Sj6JS/4EkEgeaHW9gsQ71RjmRYlN nptcxWQhWpTbBh08BOOM1F116CRf3sGK2KjPmAuch+i3ko88t5MPI0DwRpb34HQP64/oYabo2lv AkAVTfC9EWcSxptGelqgOqtQWgj32DVJlizM0Ma9BdfsrnfeMfM= X-Google-Smtp-Source: AGHT+IH0d58rGWHCXEpkj7PaCzoJMt0vqxtCsjEoJi4vb1FwzxgpckX9h31G9WT2Is6kAP/nriGNww== X-Received: by 2002:a17:902:f605:b0:224:2207:5130 with SMTP id d9443c01a7336-22780e260d3mr210963105ad.45.1742838581913; Mon, 24 Mar 2025 10:49:41 -0700 (PDT) Received: from localhost.localdomain ([2601:640:8900:32c0::e120]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-301bf576c7dsm12505821a91.3.2025.03.24.10.49.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Mar 2025 10:49:41 -0700 (PDT) From: Mohamed Khalfella To: Christoph Hellwig , Sagi Grimberg , Keith Busch Cc: Hannes Reinecke , Daniel Wagner , John Meneghini , randyj@purestorage.com, adailey@purestorage.com, jrani@purestorage.com, linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, mkhalfella@purestorage.com Subject: [RFC PATCH v1 7/7] nvme-tcp: Do not immediately cancel inflight requests during recovery Date: Mon, 24 Mar 2025 10:49:00 -0700 Message-ID: <20250324174909.3919131-8-mkhalfella@purestorage.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324174909.3919131-1-mkhalfella@purestorage.com> References: <20250324174909.3919131-1-mkhalfella@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In case of controller recovery, reset, or deletion it is possible there are inflight requests for which no response was received from target controller. TP4129 requires such inflight requests to not be canceled immediately. Instead these requests should be held until the target learns about disconnection and quiesce pending nvme commands. Implement this for nvme-tcp. Signed-off-by: Mohamed Khalfella Tested-by: Shai Dagieli (Shai.Dagieli@dell.com) --- drivers/nvme/host/tcp.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 327e37a25281..822e6329e332 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -2252,12 +2252,14 @@ static int nvme_tcp_configure_admin_queue(struct nv= me_ctrl *ctrl, bool new) return error; } =20 -static void nvme_tcp_teardown_admin_queue(struct nvme_ctrl *ctrl) +static void nvme_tcp_teardown_admin_queue(struct nvme_ctrl *ctrl, + bool hold_reqs) { nvme_quiesce_admin_queue(ctrl); blk_sync_queue(ctrl->admin_q); nvme_tcp_stop_queue(ctrl, 0); - nvme_cancel_admin_tagset(ctrl); + if (!hold_reqs) + nvme_cancel_admin_tagset(ctrl); nvme_tcp_free_admin_queue(ctrl); if (ctrl->tls_pskid) { dev_dbg(ctrl->device, "Wipe negotiated TLS_PSK %08x\n", @@ -2274,12 +2276,14 @@ static void nvme_tcp_suspend_io_queues(struct nvme_= ctrl *ctrl) nvme_sync_io_queues(ctrl); } =20 -static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl) +static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl, + bool hold_reqs) { if (ctrl->queue_count <=3D 1) return; nvme_tcp_stop_io_queues(ctrl); - nvme_cancel_tagset(ctrl); + if (!hold_reqs) + nvme_cancel_tagset(ctrl); nvme_tcp_free_io_queues(ctrl); } =20 @@ -2375,7 +2379,7 @@ static int nvme_tcp_setup_ctrl(struct nvme_ctrl *ctrl= , bool new) } destroy_admin: nvme_stop_keep_alive(ctrl); - nvme_tcp_teardown_admin_queue(ctrl); + nvme_tcp_teardown_admin_queue(ctrl, false); if (new) { nvme_unquiesce_admin_queue(ctrl); nvme_remove_admin_tag_set(ctrl); @@ -2418,10 +2422,12 @@ static void nvme_tcp_error_recovery_work(struct wor= k_struct *work) nvme_stop_keep_alive(ctrl); flush_work(&ctrl->async_event_work); nvme_tcp_suspend_io_queues(ctrl); - nvme_tcp_teardown_io_queues(ctrl); + nvme_tcp_teardown_io_queues(ctrl, true); + nvme_tcp_teardown_admin_queue(ctrl, true); + if (nvme_queue_held_requests_work(ctrl)) + nvme_wait_for_held_requests(ctrl); /* unquiesce to fail fast pending requests */ nvme_unquiesce_io_queues(ctrl); - nvme_tcp_teardown_admin_queue(ctrl); nvme_unquiesce_admin_queue(ctrl); nvme_auth_stop(ctrl); =20 @@ -2439,11 +2445,15 @@ static void nvme_tcp_error_recovery_work(struct wor= k_struct *work) =20 static void nvme_tcp_teardown_ctrl(struct nvme_ctrl *ctrl, bool shutdown) { + bool hold_reqs; + nvme_tcp_suspend_io_queues(ctrl); - nvme_tcp_teardown_io_queues(ctrl); nvme_quiesce_admin_queue(ctrl); - nvme_disable_ctrl(ctrl, shutdown); - nvme_tcp_teardown_admin_queue(ctrl); + hold_reqs =3D nvme_disable_ctrl(ctrl, shutdown); + nvme_tcp_teardown_io_queues(ctrl, hold_reqs); + nvme_tcp_teardown_admin_queue(ctrl, hold_reqs); + if (hold_reqs && nvme_queue_held_requests_work(ctrl)) + nvme_wait_for_held_requests(ctrl); } =20 static void nvme_tcp_delete_ctrl(struct nvme_ctrl *ctrl) --=20 2.48.1