Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ext4: add two trace points for moving extents

To facilitate tracking the length, type, and outcome of the move extent,
add a trace point at both the entry and exit of mext_move_extent().

Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Message-ID: <20251013015128.499308-13-yi.zhang@huaweicloud.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>

authored by

Zhang Yi and committed by
Theodore Ts'o
9dbf9453 65097262

+86 -2
+12 -2
fs/ext4/move_extent.c
··· 13 13 #include "ext4.h" 14 14 #include "ext4_extents.h" 15 15 16 + #include <trace/events/ext4.h> 17 + 16 18 struct mext_data { 17 19 struct inode *orig_inode; /* Origin file inode */ 18 20 struct inode *donor_inode; /* Donor file inode */ ··· 313 311 int ret, ret2; 314 312 315 313 *m_len = 0; 314 + trace_ext4_move_extent_enter(orig_inode, orig_map, donor_inode, 315 + mext->donor_lblk); 316 316 credits = ext4_chunk_trans_extent(orig_inode, 0) * 2; 317 317 handle = ext4_journal_start(orig_inode, EXT4_HT_MOVE_EXTENTS, credits); 318 - if (IS_ERR(handle)) 319 - return PTR_ERR(handle); 318 + if (IS_ERR(handle)) { 319 + ret = PTR_ERR(handle); 320 + goto out; 321 + } 320 322 321 323 ret = mext_move_begin(mext, folio, &move_type); 322 324 if (ret) ··· 385 379 mext_folio_double_unlock(folio); 386 380 stop_handle: 387 381 ext4_journal_stop(handle); 382 + out: 383 + trace_ext4_move_extent_exit(orig_inode, orig_map->m_lblk, donor_inode, 384 + mext->donor_lblk, orig_map->m_len, *m_len, 385 + move_type, ret); 388 386 return ret; 389 387 390 388 repair_branches:
+74
include/trace/events/ext4.h
··· 3016 3016 __entry->fsblk, __entry->flags) 3017 3017 ); 3018 3018 3019 + TRACE_EVENT(ext4_move_extent_enter, 3020 + TP_PROTO(struct inode *orig_inode, struct ext4_map_blocks *orig_map, 3021 + struct inode *donor_inode, ext4_lblk_t donor_lblk), 3022 + 3023 + TP_ARGS(orig_inode, orig_map, donor_inode, donor_lblk), 3024 + 3025 + TP_STRUCT__entry( 3026 + __field(dev_t, dev) 3027 + __field(ino_t, orig_ino) 3028 + __field(ext4_lblk_t, orig_lblk) 3029 + __field(unsigned int, orig_flags) 3030 + __field(ino_t, donor_ino) 3031 + __field(ext4_lblk_t, donor_lblk) 3032 + __field(unsigned int, len) 3033 + ), 3034 + 3035 + TP_fast_assign( 3036 + __entry->dev = orig_inode->i_sb->s_dev; 3037 + __entry->orig_ino = orig_inode->i_ino; 3038 + __entry->orig_lblk = orig_map->m_lblk; 3039 + __entry->orig_flags = orig_map->m_flags; 3040 + __entry->donor_ino = donor_inode->i_ino; 3041 + __entry->donor_lblk = donor_lblk; 3042 + __entry->len = orig_map->m_len; 3043 + ), 3044 + 3045 + TP_printk("dev %d,%d origin ino %lu lblk %u flags %s donor ino %lu lblk %u len %u", 3046 + MAJOR(__entry->dev), MINOR(__entry->dev), 3047 + (unsigned long) __entry->orig_ino, __entry->orig_lblk, 3048 + show_mflags(__entry->orig_flags), 3049 + (unsigned long) __entry->donor_ino, __entry->donor_lblk, 3050 + __entry->len) 3051 + ); 3052 + 3053 + TRACE_EVENT(ext4_move_extent_exit, 3054 + TP_PROTO(struct inode *orig_inode, ext4_lblk_t orig_lblk, 3055 + struct inode *donor_inode, ext4_lblk_t donor_lblk, 3056 + unsigned int m_len, u64 move_len, int move_type, int ret), 3057 + 3058 + TP_ARGS(orig_inode, orig_lblk, donor_inode, donor_lblk, m_len, 3059 + move_len, move_type, ret), 3060 + 3061 + TP_STRUCT__entry( 3062 + __field(dev_t, dev) 3063 + __field(ino_t, orig_ino) 3064 + __field(ext4_lblk_t, orig_lblk) 3065 + __field(ino_t, donor_ino) 3066 + __field(ext4_lblk_t, donor_lblk) 3067 + __field(unsigned int, m_len) 3068 + __field(u64, move_len) 3069 + __field(int, move_type) 3070 + __field(int, ret) 3071 + ), 3072 + 3073 + TP_fast_assign( 3074 + __entry->dev = orig_inode->i_sb->s_dev; 3075 + __entry->orig_ino = orig_inode->i_ino; 3076 + __entry->orig_lblk = orig_lblk; 3077 + __entry->donor_ino = donor_inode->i_ino; 3078 + __entry->donor_lblk = donor_lblk; 3079 + __entry->m_len = m_len; 3080 + __entry->move_len = move_len; 3081 + __entry->move_type = move_type; 3082 + __entry->ret = ret; 3083 + ), 3084 + 3085 + TP_printk("dev %d,%d origin ino %lu lblk %u donor ino %lu lblk %u m_len %u, move_len %llu type %d ret %d", 3086 + MAJOR(__entry->dev), MINOR(__entry->dev), 3087 + (unsigned long) __entry->orig_ino, __entry->orig_lblk, 3088 + (unsigned long) __entry->donor_ino, __entry->donor_lblk, 3089 + __entry->m_len, __entry->move_len, __entry->move_type, 3090 + __entry->ret) 3091 + ); 3092 + 3019 3093 #endif /* _TRACE_EXT4_H */ 3020 3094 3021 3095 /* This part must be outside protection */