From: Damien Le Moal <dlemoal@kernel.org>
To: linux-nvme@lists.infradead.org, Keith Busch <kbusch@kernel.org>,
Christoph Hellwig <hch@lst.de>, Sagi Grimberg <sagi@grimberg.me>
Subject: [PATCH 1/3] nvmet: pci-epf: Always fully initialize completion entries
Date: Tue, 8 Apr 2025 11:47:31 +0900 [thread overview]
Message-ID: <20250408024733.690966-2-dlemoal@kernel.org> (raw)
In-Reply-To: <20250408024733.690966-1-dlemoal@kernel.org>
For a command that is normally processed through the command request
execute() function, the completion entry for the command is initialized
by __nvmet_req_complete() and nvmet_pci_epf_cq_work() only needs to set
the status field and the phase of the completion entry before posting
the entry to the completion queue.
However, for commands that are failed due to an internal error (e.g. the
command data buffer allocation fails), the command request execute()
function is not called and __nvmet_req_complete() is never executed for
the command, leaving the command completion entry uninitialized. For
such command failed before calling req->execute(), the host ends up
seeing completion entries with an invalid submission queue ID and
command ID.
Avoid such issue by always fully initilizing a command completion entry
in nvmet_pci_epf_cq_work(), setting the entry submission queue ID and
command ID.
Fixes: 0faa0fe6f90e ("nvmet: New NVMe PCI endpoint function target driver")
Cc: stable@vger.kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
drivers/nvme/target/pci-epf.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/nvme/target/pci-epf.c b/drivers/nvme/target/pci-epf.c
index 51c27b32248d..f6b22ef4c267 100644
--- a/drivers/nvme/target/pci-epf.c
+++ b/drivers/nvme/target/pci-epf.c
@@ -1763,6 +1763,8 @@ static void nvmet_pci_epf_cq_work(struct work_struct *work)
/* Post the IOD completion entry. */
cqe = &iod->cqe;
+ cqe->sq_id = cpu_to_le16(iod->sq->qid);
+ cqe->command_id = iod->cmd.common.command_id;
cqe->status = cpu_to_le16((iod->status << 1) | cq->phase);
dev_dbg(ctrl->dev,
--
2.49.0
next prev parent reply other threads:[~2025-04-08 2:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-08 2:47 [PATCH 0/3] NVMe PCI endpoint target fixes Damien Le Moal
2025-04-08 2:47 ` Damien Le Moal [this message]
2025-04-10 8:24 ` [PATCH 1/3] nvmet: pci-epf: Always fully initialize completion entries Keith Busch
2025-04-10 8:38 ` Christoph Hellwig
2025-04-10 9:15 ` Niklas Cassel
2025-04-14 22:03 ` Sagi Grimberg
2025-04-08 2:47 ` [PATCH 2/3] nvmet: pci-epf: Clear CC and CSTS when disabling the controller Damien Le Moal
2025-04-10 8:34 ` Keith Busch
2025-04-11 0:32 ` Damien Le Moal
2025-04-14 17:58 ` Keith Busch
2025-04-10 11:54 ` Niklas Cassel
2025-04-11 0:35 ` Damien Le Moal
2025-04-14 22:07 ` Sagi Grimberg
2025-04-08 2:47 ` [PATCH 3/3] nvmet: pci-epf: Cleanup link state management Damien Le Moal
2025-04-10 8:35 ` Keith Busch
2025-04-10 11:56 ` Niklas Cassel
2025-04-14 22:05 ` Sagi Grimberg
2025-04-10 8:05 ` [PATCH 0/3] NVMe PCI endpoint target fixes Damien Le Moal
2025-04-10 8:12 ` Christoph Hellwig
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=20250408024733.690966-2-dlemoal@kernel.org \
--to=dlemoal@kernel.org \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--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.