On 03/04/2025 06:28, Ritesh Harjani (IBM) wrote:
Filesystems like XFS can implement atomic write I/O using either REQ_ATOMIC
flag set in the bio or via CoW operation. It will be useful if we have a
flag in trace events to distinguish between the two.
I suppose that this could be useful. So far I test with block driver
traces, i.e. NVMe or SCSI internal traces, just to ensure that we see
the requests sent as expected
This patch adds
char 'a' to rwbs field of the trace events if REQ_ATOMIC flag is set in
the bio.
All others use uppercase characters, so I suggest that you continue to
use that. Since 'A' is already used, how about 'U' for untorn? Or 'T'
for aTOMic :)
<W/ REQ_ATOMIC>
=================
xfs_io-1107 [002] ..... 406.206441: block_rq_issue: 8,48 WSa 16384 () 768 + 32 none,0,0 [xfs_io]
<idle>-0 [002] ..s1. 406.209918: block_rq_complete: 8,48 WSa () 768 + 32 none,0,0 [0]
<W/O REQ_ATOMIC>
===============
xfs_io-1108 [002] ..... 411.212317: block_rq_issue: 8,48 WS 16384 () 1024 + 32 none,0,0 [xfs_io]
<idle>-0 [002] ..s1. 411.215842: block_rq_complete: 8,48 WS () 1024 + 32 none,0,0 [0]
Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx>
---
include/trace/events/block.h | 2 +-
kernel/trace/blktrace.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index bd0ea07338eb..de538b110ea1 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -11,7 +11,7 @@
#include <linux/tracepoint.h>
#include <uapi/linux/ioprio.h>
-#define RWBS_LEN 8
+#define RWBS_LEN 9
#define IOPRIO_CLASS_STRINGS \
{ IOPRIO_CLASS_NONE, "none" }, \
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 3679a6d18934..6badf296ab2b 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -1896,6 +1896,8 @@ void blk_fill_rwbs(char *rwbs, blk_opf_t opf)
rwbs[i++] = 'S';
if (opf & REQ_META)
rwbs[i++] = 'M';
+ if (opf & REQ_ATOMIC)
+ rwbs[i++] = 'a';
rwbs[i] = '\0';
}
--
2.48.1