[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <176169810525.1424854.9261554714410154355.stgit@frogsfrogsfrogs>
Date: Tue, 28 Oct 2025 17:47:02 -0700
From: "Darrick J. Wong" <djwong@...nel.org>
To: djwong@...nel.org, miklos@...redi.hu
Cc: joannelkoong@...il.com, bernd@...ernd.com, neal@...pa.dev,
linux-ext4@...r.kernel.org, linux-fsdevel@...r.kernel.org
Subject: [PATCH 08/31] fuse_trace: create a per-inode flag for toggling iomap
From: Darrick J. Wong <djwong@...nel.org>
Add tracepoints for the previous patch.
Signed-off-by: "Darrick J. Wong" <djwong@...nel.org>
---
fs/fuse/fuse_trace.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
fs/fuse/file_iomap.c | 6 ++++++
2 files changed, 50 insertions(+)
diff --git a/fs/fuse/fuse_trace.h b/fs/fuse/fuse_trace.h
index af21654d797f45..fac981e2a30df0 100644
--- a/fs/fuse/fuse_trace.h
+++ b/fs/fuse/fuse_trace.h
@@ -300,6 +300,25 @@ DEFINE_FUSE_BACKING_EVENT(fuse_backing_close);
{ FUSE_IOMAP_TYPE_UNWRITTEN, "unwritten" }, \
{ FUSE_IOMAP_TYPE_INLINE, "inline" }
+TRACE_DEFINE_ENUM(FUSE_I_ADVISE_RDPLUS);
+TRACE_DEFINE_ENUM(FUSE_I_INIT_RDPLUS);
+TRACE_DEFINE_ENUM(FUSE_I_SIZE_UNSTABLE);
+TRACE_DEFINE_ENUM(FUSE_I_BAD);
+TRACE_DEFINE_ENUM(FUSE_I_BTIME);
+TRACE_DEFINE_ENUM(FUSE_I_CACHE_IO_MODE);
+TRACE_DEFINE_ENUM(FUSE_I_EXCLUSIVE);
+TRACE_DEFINE_ENUM(FUSE_I_IOMAP);
+
+#define FUSE_IFLAG_STRINGS \
+ { 1 << FUSE_I_ADVISE_RDPLUS, "advise_rdplus" }, \
+ { 1 << FUSE_I_INIT_RDPLUS, "init_rdplus" }, \
+ { 1 << FUSE_I_SIZE_UNSTABLE, "size_unstable" }, \
+ { 1 << FUSE_I_BAD, "bad" }, \
+ { 1 << FUSE_I_BTIME, "btime" }, \
+ { 1 << FUSE_I_CACHE_IO_MODE, "cacheio" }, \
+ { 1 << FUSE_I_EXCLUSIVE, "excl" }, \
+ { 1 << FUSE_I_IOMAP, "iomap" }
+
DECLARE_EVENT_CLASS(fuse_iomap_check_class,
TP_PROTO(const char *func, int line, const char *condition),
@@ -488,6 +507,31 @@ TRACE_EVENT(fuse_iomap_dev_add,
__entry->fd,
__entry->flags)
);
+
+DECLARE_EVENT_CLASS(fuse_inode_state_class,
+ TP_PROTO(const struct inode *inode),
+ TP_ARGS(inode),
+
+ TP_STRUCT__entry(
+ FUSE_INODE_FIELDS
+ __field(unsigned long, state)
+ ),
+
+ TP_fast_assign(
+ FUSE_INODE_ASSIGN(inode, fi, fm);
+ __entry->state = fi->state;
+ ),
+
+ TP_printk(FUSE_INODE_FMT " state (%s)",
+ FUSE_INODE_PRINTK_ARGS,
+ __print_flags(__entry->state, "|", FUSE_IFLAG_STRINGS))
+);
+#define DEFINE_FUSE_INODE_STATE_EVENT(name) \
+DEFINE_EVENT(fuse_inode_state_class, name, \
+ TP_PROTO(const struct inode *inode), \
+ TP_ARGS(inode))
+DEFINE_FUSE_INODE_STATE_EVENT(fuse_iomap_init_inode);
+DEFINE_FUSE_INODE_STATE_EVENT(fuse_iomap_evict_inode);
#endif /* CONFIG_FUSE_IOMAP */
#endif /* _TRACE_FUSE_H */
diff --git a/fs/fuse/file_iomap.c b/fs/fuse/file_iomap.c
index fc0d5f135bacf9..66a7b8faa31ac2 100644
--- a/fs/fuse/file_iomap.c
+++ b/fs/fuse/file_iomap.c
@@ -659,6 +659,8 @@ void fuse_iomap_init_nonreg_inode(struct inode *inode, unsigned attr_flags)
if (conn->iomap && (attr_flags & FUSE_ATTR_IOMAP))
set_bit(FUSE_I_EXCLUSIVE, &fi->state);
+
+ trace_fuse_iomap_init_inode(inode);
}
void fuse_iomap_init_reg_inode(struct inode *inode, unsigned attr_flags)
@@ -672,6 +674,8 @@ void fuse_iomap_init_reg_inode(struct inode *inode, unsigned attr_flags)
set_bit(FUSE_I_EXCLUSIVE, &fi->state);
fuse_inode_set_iomap(inode);
}
+
+ trace_fuse_iomap_init_inode(inode);
}
void fuse_iomap_evict_inode(struct inode *inode)
@@ -679,6 +683,8 @@ void fuse_iomap_evict_inode(struct inode *inode)
struct fuse_conn *conn = get_fuse_conn(inode);
struct fuse_inode *fi = get_fuse_inode(inode);
+ trace_fuse_iomap_evict_inode(inode);
+
if (fuse_inode_has_iomap(inode))
fuse_inode_clear_iomap(inode);
if (conn->iomap && fuse_inode_is_exclusive(inode))
Powered by blists - more mailing lists