mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
ext4: add block mapping tracepoints for iomap buffered I/O path
Add tracepoints for iomap buffered read, write, partial block zeroing, and writeback operations to help debug the iomap buffered I/O path. Signed-off-by: Zhang Yi <yi.zhang@huawei.com> Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com> Reviewed-by: Jan Kara <jack@suse.cz> Tested-by: syzbot@syzkaller.appspotmail.com Link: https://patch.msgid.link/20261009103033.2920530-20-yi.zhang@huaweicloud.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
3c612a5720
commit
008f019ab5
|
|
@ -4019,6 +4019,8 @@ static int ext4_iomap_buffered_read_begin(struct inode *inode, loff_t offset,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
trace_ext4_iomap_buffered_read_begin(inode, &map, offset, length,
|
||||
flags);
|
||||
ext4_set_iomap(inode, iomap, &map, offset, length, flags);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -4052,6 +4054,8 @@ static int ext4_iomap_buffered_do_write_begin(struct inode *inode,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
trace_ext4_iomap_buffered_write_begin(inode, &map, offset, length,
|
||||
flags);
|
||||
ext4_set_iomap(inode, iomap, &map, offset, length, flags);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -4168,6 +4172,7 @@ static int ext4_iomap_zero_begin(struct inode *inode,
|
|||
goto again;
|
||||
}
|
||||
|
||||
trace_ext4_iomap_zero_begin(inode, &map, offset, length, flags);
|
||||
ext4_set_iomap(inode, iomap, &map, offset, length, flags);
|
||||
iomap->flags |= iomap_flags;
|
||||
|
||||
|
|
@ -4279,6 +4284,7 @@ static int ext4_iomap_map_writeback_range(struct iomap_writepage_ctx *wpc,
|
|||
return ret;
|
||||
}
|
||||
|
||||
trace_ext4_iomap_map_writeback_range(inode, &map, offset, dirty_len, 0);
|
||||
ext4_set_iomap(inode, &wpc->iomap, &map, offset, dirty_len, 0);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3157,6 +3157,53 @@ TRACE_EVENT(ext4_move_extent_exit,
|
|||
__entry->ret)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(ext4_set_iomap_class,
|
||||
TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
|
||||
loff_t offset, loff_t length, unsigned int flags),
|
||||
TP_ARGS(inode, map, offset, length, flags),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(u64, ino)
|
||||
__field(ext4_lblk_t, m_lblk)
|
||||
__field(ext4_fsblk_t, pblk)
|
||||
__field(unsigned int, m_len)
|
||||
__field(unsigned int, m_flags)
|
||||
__field(u64, m_seq)
|
||||
__field(loff_t, offset)
|
||||
__field(loff_t, length)
|
||||
__field(unsigned int, iomap_flags)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->m_lblk = map->m_lblk;
|
||||
__entry->pblk = map->m_pblk;
|
||||
__entry->m_len = map->m_len;
|
||||
__entry->m_flags = map->m_flags;
|
||||
__entry->m_seq = map->m_seq;
|
||||
__entry->offset = offset;
|
||||
__entry->length = length;
|
||||
__entry->iomap_flags = flags;
|
||||
|
||||
),
|
||||
TP_printk("dev %d:%d ino %llu m_lblk %u pblk %llu m_len %u m_flags %s m_seq %llu orig_off 0x%llx orig_len 0x%llx iomap_flags 0x%x",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->ino, __entry->m_lblk, __entry->pblk, __entry->m_len,
|
||||
show_mflags(__entry->m_flags), __entry->m_seq,
|
||||
__entry->offset, __entry->length, __entry->iomap_flags)
|
||||
)
|
||||
|
||||
#define DEFINE_SET_IOMAP_EVENT(name) \
|
||||
DEFINE_EVENT(ext4_set_iomap_class, name, \
|
||||
TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, \
|
||||
loff_t offset, loff_t length, unsigned int flags), \
|
||||
TP_ARGS(inode, map, offset, length, flags))
|
||||
|
||||
DEFINE_SET_IOMAP_EVENT(ext4_iomap_buffered_read_begin);
|
||||
DEFINE_SET_IOMAP_EVENT(ext4_iomap_buffered_write_begin);
|
||||
DEFINE_SET_IOMAP_EVENT(ext4_iomap_map_writeback_range);
|
||||
DEFINE_SET_IOMAP_EVENT(ext4_iomap_zero_begin);
|
||||
|
||||
#endif /* _TRACE_EXT4_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user