All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mohamed Khalfella <mkhalfella@purestorage.com>
To: Daniel Wagner <dwagner@suse.de>
Cc: Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@kernel.dk>,
	Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>,
	Justin Tee <justin.tee@broadcom.com>,
	Naresh Gottumukkala <nareshgottumukkala83@gmail.com>,
	Paul Ely <paul.ely@broadcom.com>,
	Hannes Reinecke <hare@kernel.org>,
	Chaitanya Kulkarni <kch@nvidia.com>,
	James Smart <jsmart833426@gmail.com>,
	Randy Jennings <randyj@purestorage.com>,
	linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 09/18] nvme: Implement cross-controller reset completion
Date: Tue, 20 Oct 2026 18:04:38 -0700	[thread overview]
Message-ID: <20261021010438.GR2931-mkhalfella@purestorage.com> (raw)
In-Reply-To: <207f5a00-7fee-4ea5-b541-38424d4766bd@flourine.local>

On Tue 2026-10-20 11:18:04 +0200, Daniel Wagner wrote:
> On Sun, Sep 20, 2026 at 11:28:07AM -0700, Mohamed Khalfella wrote:
> >  static void nvme_fw_act_work(struct work_struct *work)
> >  {
> >  	struct nvme_ctrl *ctrl = container_of(work,
> > @@ -5099,6 +5142,9 @@ static bool nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result)
> >  	case NVME_AER_NOTICE_DISC_CHANGED:
> >  		ctrl->aen_result = result;
> >  		break;
> > +	case NVME_AER_NOTICE_CCR_COMPLETED:
> > +		queue_work(nvme_wq, &ctrl->ccr_work);
> 
> What happens to the waiters on sctrl->ccr_list when the source
> controller enters error recovery while a CCR is pending?

You already answered it below :)

> 
> As far as I can tell, ccr_work itself is fine. The reset path cancels
> it via nvme_stop_ctrl(), and in the error recovery path the Get Log
> Page just fails once the admin queue is torn down. But the target drops
> all CCRs issued by the old association when it frees the controller,
> so the CCR completed AEN for them will never arrive. Nothing on the
> host side walks ccr_list when the controller leaves LIVE, so
> nvme_issue_wait_ccr() sleeps until min(kato, deadline - now) runs out
> before nvme_fence_ctrl() tries the next source controller. In the
> worst case that eats the whole fencing window.

If the remaining of the fencing window (deadline - now) is less than
kato then I am fine with this scenario wasting this time anyway. If we
hit the deadline then we consider fencing done anyway. If it consumes
kato from the deadline then we retry another path.

> 
> Would it make sense to fail all pending entries (set ccrs to a failure
> status and complete them under ctrl->lock) when the source controller
> goes into error recovery, so the fencing code can move on to another
> path right away?

Failing pending CCR entries that we know we are not going to complete
will help in this case. The question is where to do that. A LIVE
controller might hit an error and transition to FENCING, or manually 
reset and move to RESETTING, or deleted and go to DELETING. Do we need
to consider all these places to fail the pending CCRs?


You might have also noticed that nvme_issue_wait_ccr() calling
__nvme_submit_sync_cmd() might consume the entire fencing window if the
CCR command gets held because the source controller hits an error. This
is another area be optimized. I am inclined to leave the code as it is
today. What is being described here is an optimization that can come
later on.


  reply	other threads:[~2026-10-21  1:04 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-20 18:27 [PATCH v6 00/18] TP8028 Rapid Path Failure Recovery Mohamed Khalfella
2026-09-20 18:27 ` [PATCH v6 01/18] nvmet: Rapid Path Failure Recovery set controller identify fields Mohamed Khalfella
2026-10-15 12:58   ` Daniel Wagner
2026-10-19 18:06     ` Mohamed Khalfella
2026-09-20 18:28 ` [PATCH v6 02/18] nvmet/debugfs: Export controller CIU and CIRN via debugfs Mohamed Khalfella
2026-10-19 12:01   ` Daniel Wagner
2026-10-19 19:01     ` Mohamed Khalfella
2026-10-20 12:59       ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 03/18] nvmet: Implement CCR nvme command Mohamed Khalfella
2026-10-19 16:00   ` Daniel Wagner
2026-10-19 20:21     ` Mohamed Khalfella
2026-09-20 18:28 ` [PATCH v6 04/18] nvmet: Implement CCR logpage Mohamed Khalfella
2026-10-19 16:18   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 05/18] nvmet: Send an AEN on CCR completion Mohamed Khalfella
2026-10-19 16:31   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 06/18] nvme: Rapid Path Failure Recovery read controller identify fields Mohamed Khalfella
2026-10-19 16:56   ` Daniel Wagner
2026-10-19 21:18     ` Mohamed Khalfella
2026-09-20 18:28 ` [PATCH v6 07/18] nvme: Introduce FENCING and FENCED controller states Mohamed Khalfella
2026-10-19 17:01   ` Daniel Wagner
2026-10-19 17:18     ` Daniel Wagner
2026-10-19 21:40       ` Mohamed Khalfella
2026-10-20 13:15         ` Daniel Wagner
2026-10-19 21:26     ` Mohamed Khalfella
2026-10-20 13:10       ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 08/18] nvme: Implement cross-controller reset recovery Mohamed Khalfella
2026-10-20  8:55   ` Daniel Wagner
2026-10-20 23:56     ` Mohamed Khalfella
2026-10-21  8:29       ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 09/18] nvme: Implement cross-controller reset completion Mohamed Khalfella
2026-10-20  9:18   ` Daniel Wagner
2026-10-21  1:04     ` Mohamed Khalfella [this message]
2026-10-21  8:43       ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 10/18] nvme-tcp: Use CCR to recover controller that hits an error Mohamed Khalfella
2026-10-20  9:36   ` Daniel Wagner
2026-10-21  1:20     ` Mohamed Khalfella
2026-09-20 18:28 ` [PATCH v6 11/18] nvme-rdma: " Mohamed Khalfella
2026-10-20  9:36   ` Daniel Wagner
2026-10-21  1:25     ` Mohamed Khalfella
2026-09-20 18:28 ` [PATCH v6 12/18] nvme-fc: start error recovery instead of aborting timed out IOs Mohamed Khalfella
2026-10-20  9:55   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 13/18] nvme-fc: perform error recovery directly from ioerr_work Mohamed Khalfella
2026-10-20 10:20   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 14/18] nvme-fc: Use CCR to recover controller that hits an error Mohamed Khalfella
2026-10-20 11:56   ` Daniel Wagner
2026-10-21  1:31     ` Mohamed Khalfella
2026-09-20 18:28 ` [PATCH v6 15/18] nvme-fc: Hold inflight requests while in FENCING state Mohamed Khalfella
2026-10-20 12:21   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 16/18] nvmet: Add support for CQT to nvme target Mohamed Khalfella
2026-10-20 12:40   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 17/18] nvme: Add support for CQT to nvme host Mohamed Khalfella
2026-10-20 12:46   ` Daniel Wagner
2026-09-20 18:28 ` [PATCH v6 18/18] nvme: let controller deletion wait out a fencing window Mohamed Khalfella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261021010438.GR2931-mkhalfella@purestorage.com \
    --to=mkhalfella@purestorage.com \
    --cc=axboe@kernel.dk \
    --cc=dwagner@suse.de \
    --cc=hare@kernel.org \
    --cc=hch@lst.de \
    --cc=jsmart833426@gmail.com \
    --cc=justin.tee@broadcom.com \
    --cc=kbusch@kernel.org \
    --cc=kch@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=nareshgottumukkala83@gmail.com \
    --cc=paul.ely@broadcom.com \
    --cc=randyj@purestorage.com \
    --cc=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.