From: Yongpeng Yang <[email protected]>

Introduce trace events for inline extent operations for debugging and
performance analysis:
- trace_f2fs_iext_lookup_blkaddr_start
- trace_f2fs_iext_lookup_blkaddr_end
- trace_f2fs_iext_update_data_blkaddr

Guard trace calls with NULL inode check in lookup path where inode
may be NULL.

Signed-off-by: Yongpeng Yang <[email protected]>
---
 fs/f2fs/iextent.c           | 11 ++++++
 include/trace/events/f2fs.h | 79 +++++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+)

diff --git a/fs/f2fs/iextent.c b/fs/f2fs/iextent.c
index 63a3433aa9bc..454f4e113672 100644
--- a/fs/f2fs/iextent.c
+++ b/fs/f2fs/iextent.c
@@ -10,6 +10,7 @@
 
 #include "f2fs.h"
 #include "iextent.h"
+#include <trace/events/f2fs.h>
 
 /*
  * ASSERT - debug assertion for inline extent code.
@@ -477,6 +478,9 @@ int f2fs_iext_lookup_blkaddr(struct inode *inode, struct 
folio *ifolio,
                (struct f2fs_iext_header *)get_dnode_addr(inode, ifolio);
        struct f2fs_extent *last_ext = EXT_LAST_INDEX(eh);
 
+       if (inode)
+               trace_f2fs_iext_lookup_blkaddr_start(inode, fofs);
+
        if (EXT_ENTRY_COUNT(eh) == 0 || F2FS_EXT_LOGICAL_END(last_ext) < fofs)
                error = -ENOENT;
        else
@@ -490,6 +494,11 @@ int f2fs_iext_lookup_blkaddr(struct inode *inode, struct 
folio *ifolio,
                if (len)
                        *len = 1;
        }
+
+       if (inode && !error)
+               trace_f2fs_iext_lookup_blkaddr_end(inode, fofs,
+                                               *blkaddr, len ? *len : 1);
+
        return error;
 }
 
@@ -525,6 +534,8 @@ int f2fs_iext_update_data_blkaddr(struct inode *inode, 
struct folio *ifolio,
        struct f2fs_iext_info *iext_info = sbi->iext_info;
 #endif
 
+       trace_f2fs_iext_update_data_blkaddr(inode, fofs, blkaddr);
+
 retry:
        ASSERT(sbi, retry_cnt >= 0);
        ASSERT(sbi, EXT_ENTRY_COUNT(eh) <= MAX_INLINE_EXTENTS(inode));
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index 270c1a2c24c4..dc468a0c2980 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -2623,6 +2623,85 @@ TRACE_EVENT(f2fs_fault_report,
                __entry->data)
 );
 
+TRACE_EVENT(f2fs_iext_lookup_blkaddr_start,
+
+       TP_PROTO(struct inode *inode, unsigned int pgofs),
+
+       TP_ARGS(inode, pgofs),
+
+       TP_STRUCT__entry(
+               __field(u64,    ino)
+               __field(dev_t,  dev)
+               __field(unsigned int, pgofs)
+       ),
+
+       TP_fast_assign(
+               __entry->dev = inode->i_sb->s_dev;
+               __entry->ino = inode->i_ino;
+               __entry->pgofs = pgofs;
+       ),
+
+       TP_printk("dev = (%d,%d), ino = %llu, pgofs = %u",
+               show_dev_ino(__entry),
+               __entry->pgofs)
+);
+
+TRACE_EVENT(f2fs_iext_lookup_blkaddr_end,
+
+       TP_PROTO(struct inode *inode, unsigned int pgofs, block_t blkaddr,
+                                               unsigned int len),
+
+       TP_ARGS(inode, pgofs, blkaddr, len),
+
+       TP_STRUCT__entry(
+               __field(u64,    ino)
+               __field(dev_t,  dev)
+               __field(unsigned int, pgofs)
+               __field(u32, blk)
+               __field(unsigned int, len)
+       ),
+
+       TP_fast_assign(
+               __entry->dev = inode->i_sb->s_dev;
+               __entry->ino = inode->i_ino;
+               __entry->pgofs = pgofs;
+               __entry->blk = blkaddr;
+               __entry->len = len;
+       ),
+
+       TP_printk("dev = (%d,%d), ino = %llu, pgofs = %u, blkaddr = %u, len = 
%u",
+               show_dev_ino(__entry),
+               __entry->pgofs,
+               __entry->blk,
+               __entry->len)
+);
+
+TRACE_EVENT(f2fs_iext_update_data_blkaddr,
+
+       TP_PROTO(struct inode *inode, unsigned int pgofs, block_t blkaddr),
+
+       TP_ARGS(inode, pgofs, blkaddr),
+
+       TP_STRUCT__entry(
+               __field(u64,    ino)
+               __field(dev_t,  dev)
+               __field(unsigned int, pgofs)
+               __field(u32, blk)
+       ),
+
+       TP_fast_assign(
+               __entry->dev = inode->i_sb->s_dev;
+               __entry->ino = inode->i_ino;
+               __entry->pgofs = pgofs;
+               __entry->blk = blkaddr;
+       ),
+
+       TP_printk("dev = (%d,%d), ino = %llu, pgofs = %u, blkaddr = %u",
+               show_dev_ino(__entry),
+               __entry->pgofs,
+               __entry->blk)
+);
+
 #endif /* _TRACE_F2FS_H */
 
  /* This part must be outside protection */
-- 
2.43.0



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to