[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <176169812207.1426649.9681298329609774558.stgit@frogsfrogsfrogs>
Date: Tue, 28 Oct 2025 17:57:44 -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 06/10] fuse_trace: invalidate iomap cache after file updates
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 | 43 +++++++++++++++++++++++++++++++++++++++++++
fs/fuse/file_iomap.c | 6 ++++++
fs/fuse/iomap_cache.c | 2 ++
3 files changed, 51 insertions(+)
diff --git a/fs/fuse/fuse_trace.h b/fs/fuse/fuse_trace.h
index 8f06a43fd2d69a..e8bc7de25778e0 100644
--- a/fs/fuse/fuse_trace.h
+++ b/fs/fuse/fuse_trace.h
@@ -1076,6 +1076,7 @@ DEFINE_FUSE_IOMAP_FILE_RANGE_EVENT(fuse_iomap_truncate_down);
DEFINE_FUSE_IOMAP_FILE_RANGE_EVENT(fuse_iomap_punch_range);
DEFINE_FUSE_IOMAP_FILE_RANGE_EVENT(fuse_iomap_setsize);
DEFINE_FUSE_IOMAP_FILE_RANGE_EVENT(fuse_iomap_flush_unmap_range);
+DEFINE_FUSE_IOMAP_FILE_RANGE_EVENT(fuse_iomap_cache_invalidate_range);
TRACE_EVENT(fuse_iomap_fallocate,
TP_PROTO(const struct inode *inode, int mode, loff_t offset,
@@ -1213,6 +1214,48 @@ DEFINE_FUSE_IOMAP_INLINE_EVENT(fuse_iomap_inline_write);
DEFINE_FUSE_IOMAP_INLINE_EVENT(fuse_iomap_set_inline_iomap);
DEFINE_FUSE_IOMAP_INLINE_EVENT(fuse_iomap_set_inline_srcmap);
+DECLARE_EVENT_CLASS(fuse_iomap_inode_class,
+ TP_PROTO(const struct inode *inode),
+
+ TP_ARGS(inode),
+
+ TP_STRUCT__entry(
+ FUSE_INODE_FIELDS
+ ),
+
+ TP_fast_assign(
+ FUSE_INODE_ASSIGN(inode, fi, fm);
+ ),
+
+ TP_printk(FUSE_INODE_FMT,
+ FUSE_INODE_PRINTK_ARGS)
+);
+#define DEFINE_FUSE_IOMAP_INODE_EVENT(name) \
+DEFINE_EVENT(fuse_iomap_inode_class, name, \
+ TP_PROTO(const struct inode *inode), \
+ TP_ARGS(inode))
+DEFINE_FUSE_IOMAP_INODE_EVENT(fuse_iomap_open_truncate);
+DEFINE_FUSE_IOMAP_INODE_EVENT(fuse_iomap_release_truncate);
+
+TRACE_EVENT(fuse_iomap_copied_file_range,
+ TP_PROTO(const struct inode *inode, loff_t offset,
+ size_t written),
+ TP_ARGS(inode, offset, written),
+
+ TP_STRUCT__entry(
+ FUSE_IO_RANGE_FIELDS()
+ ),
+
+ TP_fast_assign(
+ FUSE_INODE_ASSIGN(inode, fi, fm);
+ __entry->offset = offset;
+ __entry->length = written;
+ ),
+
+ TP_printk(FUSE_IO_RANGE_FMT(),
+ FUSE_IO_RANGE_PRINTK_ARGS())
+);
+
DECLARE_EVENT_CLASS(fuse_iext_class,
TP_PROTO(const struct inode *inode, const struct fuse_iext_cursor *cur,
int state, unsigned long caller_ip),
diff --git a/fs/fuse/file_iomap.c b/fs/fuse/file_iomap.c
index 25a16d23dd667d..571042ab7b6bc3 100644
--- a/fs/fuse/file_iomap.c
+++ b/fs/fuse/file_iomap.c
@@ -2503,6 +2503,8 @@ void fuse_iomap_open_truncate(struct inode *inode)
{
ASSERT(fuse_inode_has_iomap(inode));
+ trace_fuse_iomap_open_truncate(inode);
+
fuse_iomap_cache_invalidate(inode, 0);
}
@@ -2510,6 +2512,8 @@ void fuse_iomap_release_truncate(struct inode *inode)
{
ASSERT(fuse_inode_has_iomap(inode));
+ trace_fuse_iomap_release_truncate(inode);
+
fuse_iomap_cache_invalidate(inode, 0);
}
@@ -2518,5 +2522,7 @@ void fuse_iomap_copied_file_range(struct inode *inode, loff_t offset,
{
ASSERT(fuse_inode_has_iomap(inode));
+ trace_fuse_iomap_copied_file_range(inode, offset, written);
+
fuse_iomap_cache_invalidate_range(inode, offset, written);
}
diff --git a/fs/fuse/iomap_cache.c b/fs/fuse/iomap_cache.c
index 0c8a38bd5723a2..4a751dd1651872 100644
--- a/fs/fuse/iomap_cache.c
+++ b/fs/fuse/iomap_cache.c
@@ -1422,6 +1422,8 @@ int fuse_iomap_cache_invalidate_range(struct inode *inode, loff_t offset,
if (!fuse_inode_caches_iomaps(inode))
return 0;
+ trace_fuse_iomap_cache_invalidate_range(inode, offset, length);
+
aligned_offset = round_down(offset, blocksize);
if (length != FUSE_IOMAP_INVAL_TO_EOF) {
length += offset - aligned_offset;
Powered by blists - more mailing lists