* [PATCH] nvme-rdma: Do not terminate commands when in RESETTING
@ 2024-01-11 7:33 hare
0 siblings, 0 replies; only message in thread
From: hare @ 2024-01-11 7:33 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Keith Busch, Sagi Grimberg, linux-nvme, Hannes Reinecke
From: Hannes Reinecke <hare@suse.de>
Terminating commands from the timeout handler might lead
to a data corruption as the timeout might trigger before
KATO expired.
This is the case when several commands have been started
before the keep-alive command and the command timeouts
trigger just after the keep-alive command has been sent.
Then the first command will trigger an error recovery,
but all the other commands will be aborted directly
and immediately retried.
So return BLK_EH_RESET_TIMER for I/O commands when
error recovery has been started to ensure that the
commands will be retried only after the KATO interval.
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
drivers/nvme/host/rdma.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index 2e77c0f25f71..b45522b130e2 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -1950,6 +1950,18 @@ static enum blk_eh_timer_return nvme_rdma_timeout(struct request *rq)
rq->tag, nvme_cid(rq), opcode,
nvme_opcode_str(qid, opcode, fctype), qid);
+ /*
+ * If the error recovery is started we should ignore all
+ * I/O commands as they'll be aborted once error recovery starts.
+ * Otherwise they'll be failed over immediately and might
+ * cause data corruption.
+ */
+ if (ctrl->ctrl.state == NVME_CTRL_RESETTING && qid > 0) {
+ /* Avoid interfering with firmware download */
+ if (!WARN_ON(work_pending(&ctrl->ctrl.fw_act_work)))
+ return BLK_EH_RESET_TIMER;
+ }
+
if (ctrl->ctrl.state != NVME_CTRL_LIVE) {
/*
* If we are resetting, connecting or deleting we should
--
2.35.3
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-11 7:33 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-11 7:33 [PATCH] nvme-rdma: Do not terminate commands when in RESETTING hare
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.