[PATCH 11/11] nvmet: add an FDP write translation tracepoint
Guixin Liu
kanie at linux.alibaba.com
Sun Oct 18 20:36:24 PDT 2026
Add a tracepoint to the write path that reports the placement
identifier carried by a write command with the Data Placement
Directive and the backing write stream it is translated to.
Assisted-by: LLM
Signed-off-by: Guixin Liu <kanie at linux.alibaba.com>
---
drivers/nvme/target/io-cmd-bdev.c | 4 ++++
drivers/nvme/target/trace.h | 23 +++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/drivers/nvme/target/io-cmd-bdev.c b/drivers/nvme/target/io-cmd-bdev.c
index ff480f9ab9906..139be9edad969 100644
--- a/drivers/nvme/target/io-cmd-bdev.c
+++ b/drivers/nvme/target/io-cmd-bdev.c
@@ -9,6 +9,7 @@
#include <linux/memremap.h>
#include <linux/module.h>
#include "nvmet.h"
+#include "trace.h"
void nvmet_bdev_set_limits(struct block_device *bdev, struct nvme_id_ns *id)
{
@@ -302,7 +303,10 @@ static void nvmet_bdev_execute_rw(struct nvmet_req *req)
bio->bi_end_io = nvmet_bio_done;
if (req->cmd->rw.opcode == nvme_cmd_write &&
nvmet_fdp_enabled(req->ns)) {
+ u16 pid = le32_to_cpu(req->cmd->rw.dsmgmt) >> 16;
+
bio->bi_write_stream = nvmet_fdp_write_stream(req);
+ trace_nvmet_fdp_write_translate(req, pid, bio->bi_write_stream);
}
blk_start_plug(&plug);
diff --git a/drivers/nvme/target/trace.h b/drivers/nvme/target/trace.h
index 7f7ebf9558e50..0ab7252960790 100644
--- a/drivers/nvme/target/trace.h
+++ b/drivers/nvme/target/trace.h
@@ -131,6 +131,29 @@ TRACE_EVENT(nvmet_req_complete,
);
+TRACE_EVENT(nvmet_fdp_write_translate,
+ TP_PROTO(struct nvmet_req *req, u16 pid, u8 stream),
+ TP_ARGS(req, pid, stream),
+ TP_STRUCT__entry(
+ __field(u16, ctrl_id)
+ __array(char, disk, DISK_NAME_LEN)
+ __field(u32, nsid)
+ __field(u16, pid)
+ __field(u8, stream)
+ ),
+ TP_fast_assign(
+ __entry->ctrl_id = nvmet_req_to_ctrl_id(req);
+ __assign_req_name(__entry->disk, req);
+ __entry->nsid = req->ns->nsid;
+ __entry->pid = pid;
+ __entry->stream = stream;
+ ),
+ TP_printk("nvmet%s: %snsid=%u, pid=%u, write_stream=%u",
+ __print_ctrl_id(__entry->ctrl_id),
+ __print_disk_name(__entry->disk),
+ __entry->nsid, __entry->pid, __entry->stream)
+);
+
#define aer_name(aer) { aer, #aer }
TRACE_EVENT(nvmet_async_event,
--
2.43.7
More information about the Linux-nvme
mailing list