[PATCH v2 11/15] blktrace: add block trace commands for zone operations

Johannes Thumshirn
2025-09-25T15:03:29Z

Add block trace commands for zone operations. These are added as a
separate set of 'block trace commands' shifted by 32bit so that they do
not interfere with the old 16bit wide trace command field in 'struct
blk_io_trace' action.

Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
---
include/uapi/linux/blktrace_api.h | 13 ++++++++++++-
kernel/trace/blktrace.c | 18 ++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/include/uapi/linux/blktrace_api.h b/include/uapi/linux/blktrace_api.h
index d58ef484de49..0f336140ce4e 100644
--- a/include/uapi/linux/blktrace_api.h
+++ b/include/uapi/linux/blktrace_api.h
@@ -26,11 +26,22 @@ enum blktrace_cat {
BLK_TC_DRV_DATA = 1 << 14, /* binary per-driver data */
BLK_TC_FUA = 1 << 15, /* fua requests */

- BLK_TC_END = 1 << 15, /* we've run out of bits! */
+ BLK_TC_END_V1 = 1 << 15, /* we've run out of bits! */
+
+ BLK_TC_ZONE_APPEND = 1 << 16ull, /* zone append */
+ BLK_TC_ZONE_RESET = 1 << 17ull, /* zone reset */
+ BLK_TC_ZONE_RESET_ALL = 1 << 18ull, /* zone reset all */
+ BLK_TC_ZONE_FINISH = 1 << 19ull, /* zone finish */
+ BLK_TC_ZONE_OPEN = 1 << 20ull, /* zone open */
+ BLK_TC_ZONE_CLOSE = 1 << 21ull, /* zone close */
+
+ BLK_TC_END_V2 = 1 << 21ull,
};

#define BLK_TC_SHIFT (16)
#define BLK_TC_ACT(act) ((act) << BLK_TC_SHIFT)
+#define BLK_TC_SHIFT2 (32)
+#define BLK_TC_ACT2(act) ((u64)(act) << BLK_TC_SHIFT2)

/*
* Basic trace actions
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 82ad626d6202..62f6cfcee4f6 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -333,6 +333,24 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
case REQ_OP_FLUSH:
what |= BLK_TC_ACT(BLK_TC_FLUSH);
break;
+ case REQ_OP_ZONE_APPEND:
+ what |= BLK_TC_ACT2(BLK_TC_ZONE_APPEND);
+ break;
+ case REQ_OP_ZONE_RESET:
+ what |= BLK_TC_ACT2(BLK_TC_ZONE_RESET);
+ break;
+ case REQ_OP_ZONE_RESET_ALL:
+ what |= BLK_TC_ACT2(BLK_TC_ZONE_RESET_ALL);
+ break;
+ case REQ_OP_ZONE_FINISH:
+ what |= BLK_TC_ACT2(BLK_TC_ZONE_FINISH);
+ break;
+ case REQ_OP_ZONE_OPEN:
+ what |= BLK_TC_ACT2(BLK_TC_ZONE_OPEN);
+ break;
+ case REQ_OP_ZONE_CLOSE:
+ what |= BLK_TC_ACT2(BLK_TC_ZONE_CLOSE);
+ break;
default:
break;
}
--
2.51.0