mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
ext4: Add new tracepoints to debug delayed allocation space functions
Add tracepoints for ext4_da_reserve_space(), ext4_da_update_reserve_space(), and ext4_da_release_space(). Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
71f2be213a
commit
f8ec9d6837
@ -1061,6 +1061,7 @@ void ext4_da_update_reserve_space(struct inode *inode,
|
||||
int mdb_free = 0, allocated_meta_blocks = 0;
|
||||
|
||||
spin_lock(&ei->i_block_reservation_lock);
|
||||
trace_ext4_da_update_reserve_space(inode, used);
|
||||
if (unlikely(used > ei->i_reserved_data_blocks)) {
|
||||
ext4_msg(inode->i_sb, KERN_NOTICE, "%s: ino %lu, used %d "
|
||||
"with only %d reserved data blocks\n",
|
||||
@ -1846,6 +1847,7 @@ repeat:
|
||||
spin_lock(&ei->i_block_reservation_lock);
|
||||
md_reserved = ei->i_reserved_meta_blocks;
|
||||
md_needed = ext4_calc_metadata_amount(inode, lblock);
|
||||
trace_ext4_da_reserve_space(inode, md_needed);
|
||||
spin_unlock(&ei->i_block_reservation_lock);
|
||||
|
||||
/*
|
||||
|
@ -874,6 +874,107 @@ TRACE_EVENT(ext4_forget,
|
||||
__entry->mode, __entry->is_metadata, __entry->block)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_update_reserve_space,
|
||||
TP_PROTO(struct inode *inode, int used_blocks),
|
||||
|
||||
TP_ARGS(inode, used_blocks),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( umode_t, mode )
|
||||
__field( __u64, i_blocks )
|
||||
__field( int, used_blocks )
|
||||
__field( int, reserved_data_blocks )
|
||||
__field( int, reserved_meta_blocks )
|
||||
__field( int, allocated_meta_blocks )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->mode = inode->i_mode;
|
||||
__entry->i_blocks = inode->i_blocks;
|
||||
__entry->used_blocks = used_blocks;
|
||||
__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
|
||||
__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
|
||||
__entry->allocated_meta_blocks = EXT4_I(inode)->i_allocated_meta_blocks;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu mode 0%o i_blocks %llu used_blocks %d reserved_data_blocks %d reserved_meta_blocks %d allocated_meta_blocks %d",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->mode, (unsigned long long) __entry->i_blocks,
|
||||
__entry->used_blocks, __entry->reserved_data_blocks,
|
||||
__entry->reserved_meta_blocks, __entry->allocated_meta_blocks)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_reserve_space,
|
||||
TP_PROTO(struct inode *inode, int md_needed),
|
||||
|
||||
TP_ARGS(inode, md_needed),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( umode_t, mode )
|
||||
__field( __u64, i_blocks )
|
||||
__field( int, md_needed )
|
||||
__field( int, reserved_data_blocks )
|
||||
__field( int, reserved_meta_blocks )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->mode = inode->i_mode;
|
||||
__entry->i_blocks = inode->i_blocks;
|
||||
__entry->md_needed = md_needed;
|
||||
__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
|
||||
__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu mode 0%o i_blocks %llu md_needed %d reserved_data_blocks %d reserved_meta_blocks %d",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->mode, (unsigned long long) __entry->i_blocks,
|
||||
__entry->md_needed, __entry->reserved_data_blocks,
|
||||
__entry->reserved_meta_blocks)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_release_space,
|
||||
TP_PROTO(struct inode *inode, int freed_blocks),
|
||||
|
||||
TP_ARGS(inode, freed_blocks),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( umode_t, mode )
|
||||
__field( __u64, i_blocks )
|
||||
__field( int, freed_blocks )
|
||||
__field( int, reserved_data_blocks )
|
||||
__field( int, reserved_meta_blocks )
|
||||
__field( int, allocated_meta_blocks )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->mode = inode->i_mode;
|
||||
__entry->i_blocks = inode->i_blocks;
|
||||
__entry->freed_blocks = freed_blocks;
|
||||
__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
|
||||
__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
|
||||
__entry->allocated_meta_blocks = EXT4_I(inode)->i_allocated_meta_blocks;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu mode 0%o i_blocks %llu freed_blocks %d reserved_data_blocks %d reserved_meta_blocks %d allocated_meta_blocks %d",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->mode, (unsigned long long) __entry->i_blocks,
|
||||
__entry->freed_blocks, __entry->reserved_data_blocks,
|
||||
__entry->reserved_meta_blocks, __entry->allocated_meta_blocks)
|
||||
);
|
||||
|
||||
|
||||
#endif /* _TRACE_EXT4_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
Loading…
Reference in New Issue
Block a user