From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (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 7DFFB1487F6 for ; Sat, 28 Feb 2026 01:20:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772241650; cv=none; b=Eu+HxQZoKgRfQcXLQlNb0m/d4R+nqZfJSP1EGPm2h3sHkypAo36ehpPzHRscJmL2L1QmvDmiVZY/B5gLbyi9L9AAgdylWrxDRpL81Z/Og9EsG4L+X60IP2SoZtLy+bbFRDmJ9Ao7+py/ouuUHCyMGhf904gy2YrzOPwEfTpfZVo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772241650; c=relaxed/simple; bh=22Vq0bGmjvxczBpF7TsUItRiBKlADLSOlH+ea2Pr0xg=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=E8YDBi6uiiy0ZUeZsE5/PUi0fJSkUvSt0J6Ox24cgf7LLGUrDOrY2ysrYmS+v0UN7Vjac+DLcO96W9xblQuPZcvPD+JTpq+9ZjQiT7XYe9sm/NtcHFRDVg2I3CaorUW+HSs0CK0ahpahRjU7xgepR8FHxVYkzgqGxr+P32phXWI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dgCsGPsN; arc=none smtp.client-ip=209.85.160.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dgCsGPsN" Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-506a67282a0so27291711cf.0 for ; Fri, 27 Feb 2026 17:20:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772241648; x=1772846448; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=m6eRP1oJT7zYaDw0uvn+FXXWlZ3RPzlF7BDTnIzrj7Y=; b=dgCsGPsN6PWcWs5tcrw4ck/5WiK14lSphy/Vk6f1aLKUjs3knzRO2fOjXa5Gv3hyx9 6uaOMsAtyfEmUc4iN2PSjdtSPMnAeEvwVyJDxR+5x9QtwR6T5W4RbaK0h2/jS5actCEq 9x8KFt/P5VWOlJibGTC60bgsNyElC7OrzqegojHLZpXVUmAMQV+Mip+9K6/xk4EXy3hJ HmikXQ4yZmcJRGlxq01FL+xZ38QpXNDMh5SlnRggWqU5FkAZUU0CN0QhIx8aniXgd6Yo wSxdGp6thITYh2/Zdb6oBWtNFx8PkkX2NziLLOfiF6vYkZwFznqZ4JEjObGzrO7Jb9cJ ts1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772241648; x=1772846448; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=m6eRP1oJT7zYaDw0uvn+FXXWlZ3RPzlF7BDTnIzrj7Y=; b=s47DZcod9DegmGVZV8ekb6sDIdRP9QLxRoxcyeBY6+AMPYR45nTdba2HcSAQAboEd0 zyYotu6eamhVn99/XLvG98C5h3B2n3khB36STphWBP+lY8zUfO9bnvvmiVk5L09ftY3n mjAhnA8Ofo7x7rg+J+FF8Afxbecx9u2GeG9jwPrevN5sJMKCCtMyefytSC6YyUsG3AFp zjWGTREtAh66THjKbIap1Z3Hg+M5uj0Ta7l4RWbhjqzB7YK7IdVKjOuoJhnh/8lFnpRb V66DNfqIUEjWaCT+/qgLXPyXc3rAc159UQUaCBjehrGdngr0fOs15CWrVX48U0rcDhnl ErqA== X-Forwarded-Encrypted: i=1; AJvYcCWEa7MzXMsvg83B9oJA1O03+jW2SVPCa+Ht/ePPw32PfYyWYKrGbyM61Cy+G5gFfCIM03seC78nG+np7EU=@vger.kernel.org X-Gm-Message-State: AOJu0YxPZ/xRtiABsYoUjFM0ruDAq2HEf+ZWCNUNpiLtTv+LRdRTgRpn dZ72E5P9RbkxPC7PnrGw2y8f0ycO901oSlVRBZuqRd3jfj2WCkOnXe8t X-Gm-Gg: ATEYQzzrMuGICLKpgB8KtbTDyGuiACUgjdN6b5vUx7zUL17Uk7kl0A+x+CPjOtsi70l yY0XzVuLbGiTFrVPnmCX/PtWWOhgE8J06n9VHxLg30W3FVYFQ6ZFz9SP43WpmswzYjog52wlS14 GOnCPBt5OvxOJbPLtahzCnrzNnrcLbY3CXMv4N6NeqNQKsqfwD2jJMiAKm4VvCtQb9pbps8YD2J xwAhsrPEIvFskiPOt/FfcfR8O2L8oB0OOQ+L1CGw1YiaIOlwlp4M5sy2LPCIc++vsnxbWIImrFh Be7EzpAr2sAsQZFKtiWvk30JgWCLxW8sE3fQq/Em1Tbf4xPBlSyW/yxeL5sVQcOeqeYmr1as6dQ uZAl6Km6X1fprIV2Kn2FkxXShT44vtPV3FlDFxsG74llKLHu3ZD8JTy6tLNVFDF9oFDt2Ih52Fy 4c1bybDp+PnSO1QNMZIv2ccNwFf5BvNZKFZEKKFv3ylK3T X-Received: by 2002:ac8:7f47:0:b0:4f4:ee07:91b9 with SMTP id d75a77b69052e-5075299a340mr57870231cf.47.1772241648332; Fri, 27 Feb 2026 17:20:48 -0800 (PST) Received: from [10.69.56.189] ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-50744ab2fd9sm54220151cf.19.2026.02.27.17.20.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 27 Feb 2026 17:20:47 -0800 (PST) Message-ID: <74b4496a-5ce9-496f-8032-a220c2f69cfd@gmail.com> Date: Fri, 27 Feb 2026 17:20:45 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 21/21] nvme-fc: Extend FENCING state per TP4129 on CCR failure To: Mohamed Khalfella , Justin Tee , Naresh Gottumukkala , Paul Ely , Chaitanya Kulkarni , Christoph Hellwig , Jens Axboe , Keith Busch , Sagi Grimberg , Hannes Reinecke , jsmart833426@gmail.com Cc: Aaron Dailey , Randy Jennings , Dhaval Giani , linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org References: <20260214042753.4073668-1-mkhalfella@purestorage.com> <20260214042753.4073668-22-mkhalfella@purestorage.com> Content-Language: en-US From: James Smart In-Reply-To: <20260214042753.4073668-22-mkhalfella@purestorage.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2/13/2026 8:25 PM, Mohamed Khalfella wrote: > If CCR operations fail and CQT is supported, we must defer the retry of > inflight requests per TP4129. Update ctrl->fencing_work to schedule > ctrl->fenced_work, effectively extending the FENCING state. This delay > ensures that inflight requests are held until it is safe for them to be > retired. > > Signed-off-by: Mohamed Khalfella > --- > drivers/nvme/host/fc.c | 39 +++++++++++++++++++++++++++++++++++---- > 1 file changed, 35 insertions(+), 4 deletions(-) > > diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c > index eac3a7ccaa5c..81088a4ce298 100644 > --- a/drivers/nvme/host/fc.c > +++ b/drivers/nvme/host/fc.c > @@ -167,6 +167,7 @@ struct nvme_fc_ctrl { > struct blk_mq_tag_set tag_set; > > struct work_struct fencing_work; > + struct delayed_work fenced_work; > struct work_struct ioerr_work; > struct delayed_work connect_work; > > @@ -1878,6 +1879,18 @@ __nvme_fc_fcpop_chk_teardowns(struct nvme_fc_ctrl *ctrl, > return ret; > } > > +static void nvme_fc_fenced_work(struct work_struct *work) > +{ > + struct nvme_fc_ctrl *fc_ctrl = container_of(to_delayed_work(work), > + struct nvme_fc_ctrl, fenced_work); > + struct nvme_ctrl *ctrl = &fc_ctrl->ctrl; > + > + dev_info(ctrl->device, "Time-based recovery finished\n"); > + nvme_change_ctrl_state(ctrl, NVME_CTRL_FENCED); > + if (nvme_change_ctrl_state(ctrl, NVME_CTRL_RESETTING)) > + queue_work(nvme_reset_wq, &fc_ctrl->ioerr_work); sync with comments on patch 12 > +} > + > static void nvme_fc_fencing_work(struct work_struct *work) > { > struct nvme_fc_ctrl *fc_ctrl = > @@ -1886,16 +1899,33 @@ static void nvme_fc_fencing_work(struct work_struct *work) > unsigned long rem; > > rem = nvme_fence_ctrl(ctrl); > - if (rem) { > + if (!rem) > + goto done; > + > + if (!ctrl->cqt) { > dev_info(ctrl->device, > - "CCR failed, skipping time-based recovery\n"); > + "CCR failed, CQT not supported, skip time-based recovery\n"); > + goto done; > } > > + dev_info(ctrl->device, > + "CCR failed, switch to time-based recovery, timeout = %ums\n", > + jiffies_to_msecs(rem)); > + queue_delayed_work(nvme_wq, &fc_ctrl->fenced_work, rem); > + return; > + > +done: > nvme_change_ctrl_state(ctrl, NVME_CTRL_FENCED); > if (nvme_change_ctrl_state(ctrl, NVME_CTRL_RESETTING)) > queue_work(nvme_reset_wq, &fc_ctrl->ioerr_work); > } > > +static void nvme_fc_flush_fencing_works(struct nvme_fc_ctrl *ctrl) > +{ > + flush_work(&ctrl->fencing_work); > + flush_delayed_work(&ctrl->fenced_work); > +} > + > static void > nvme_fc_ctrl_ioerr_work(struct work_struct *work) > { > @@ -1917,7 +1947,7 @@ nvme_fc_ctrl_ioerr_work(struct work_struct *work) > return; > } > > - flush_work(&ctrl->fencing_work); > + nvme_fc_flush_fencing_works(ctrl); > nvme_fc_error_recovery(ctrl); > } > > @@ -3396,7 +3426,7 @@ nvme_fc_reset_ctrl_work(struct work_struct *work) > struct nvme_fc_ctrl *ctrl = > container_of(work, struct nvme_fc_ctrl, ctrl.reset_work); > > - flush_work(&ctrl->fencing_work); > + nvme_fc_flush_fencing_works(ctrl); > nvme_stop_ctrl(&ctrl->ctrl); > > /* will block will waiting for io to terminate */ > @@ -3573,6 +3603,7 @@ nvme_fc_alloc_ctrl(struct device *dev, struct nvmf_ctrl_options *opts, > INIT_WORK(&ctrl->ctrl.reset_work, nvme_fc_reset_ctrl_work); > INIT_DELAYED_WORK(&ctrl->connect_work, nvme_fc_connect_ctrl_work); > INIT_WORK(&ctrl->fencing_work, nvme_fc_fencing_work); > + INIT_DELAYED_WORK(&ctrl->fenced_work, nvme_fc_fenced_work); > INIT_WORK(&ctrl->ioerr_work, nvme_fc_ctrl_ioerr_work); > spin_lock_init(&ctrl->lock); > looks ok. Signed-off-by: James Smart -- james