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
