btrfs: trace: Add trace points for unused block groups
Subsystems (2)
PATCH 1/1 btrfs: trace: Add trace points for unused block groups
This patch will add the following trace events:
1) btrfs_remove_block_group
For btrfs_remove_block_group() function. Triggered when a block group is really removed.
2) btrfs_add_unused_block_group
Triggered which block group is added to unused_bgs list.
3) btrfs_skip_unused_block_group
Triggered which unused block group is not deleted.
These trace events is pretty handy to debug case related to block group auto remove.
--- fs/btrfs/extent-tree.c | 4 ++++ fs/btrfs/scrub.c | 1 + include/trace/events/btrfs.h | 41 ++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+)
fs/btrfs/extent-tree.c +4 -0
@@ -6352,6 +6352,7 @@ static int update_block_group(struct btrfs_trans_handle *trans,spin_lock (&info->unused_bgs_lock);if (list_empty (&cache->bg_list)) {btrfs_get_block_group (cache); +trace_btrfs_add_unused_block_group (cache);list_add_tail (&cache->bg_list, &info->unused_bgs); }
@@ -10206,6 +10207,7 @@ int btrfs_read_block_groups(struct btrfs_fs_info *info)/* Should always be true but just in case. */ if (list_empty (&cache->bg_list)) {btrfs_get_block_group (cache); +trace_btrfs_add_unused_block_group (cache);list_add_tail (&cache->bg_list, &info->unused_bgs); }
@@ -10393,6 +10395,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,BUG_ON (!block_group);BUG_ON (!block_group->ro); +trace_btrfs_remove_block_group (block_group);/* * Free the reserved super bytes from this block group before * remove it.
@@ -10757,6 +10760,7 @@ void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info)* the ro check in case balance is currently acting on * this block group. */ +trace_btrfs_skip_unused_block_group (block_group);spin_unlock (&block_group->lock);up_write (&space_info->groups_sem); goto next;
fs/btrfs/scrub.c +1 -0
@@ -3984,6 +3984,7 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,spin_lock (&fs_info->unused_bgs_lock);if (list_empty (&cache->bg_list)) {btrfs_get_block_group (cache); +trace_btrfs_add_unused_block_group (cache);list_add_tail (&cache->bg_list, &fs_info->unused_bgs); }
include/trace/events/btrfs.h +41 -0
47 lines not on this page · raw message
Signature · 1 line
2.17.0
Quoted 5 lines · Qu Wenruo
This patch will add the following trace events:
1)btrfs_remove_block_group
Forbtrfs_remove_block_group()function. Triggered when a block group is really removed.
Quoted 8 lines
2)
btrfs_add_unused_block_group
Triggered which block group is added tounused_bgslist.3)
btrfs_skip_unused_block_group
Triggered which unused block group is not deleted.These trace events is pretty handy to debug case related to block group auto remove.
Sounds useful.
Quoted 14 lines
Signed-off-by Qu Wenruo <[email protected]>include/trace/events/btrfs.h +12
-0+DECLARE_EVENT_CLASS(btrfs__block_group, + TP_PROTO(const struct btrfs_block_group_cache *bg_cache), + + TP_ARGS(bg_cache), + + TP_STRUCT__entry_btrfs( + __field( u64, bytenr ) + __field( u64, flags ) + __field( u64, len ) + __field( u64, used ) + ), +
include/trace/events/btrfs.h TRACE_EVENT(btrfs_inode_mod_outstanding_extents, · line 1829
Quoted 10 lines
include/trace/events/btrfs.h +10
-0+TP_fast_assign_btrfs (bg_cache->fs_info, + __entry->bytenr = bg_cache->key.objectid, + __entry->len = bg_cache->key.offset, + __entry->flags = bg_cache->flags; + __entry->used =btrfs_block_group_used (&bg_cache->item); + ), + +TP_printk_btrfs ("bg bytenr=%llu len=%llu used=%llu flags=%llu(%s)" , + __entry->bytenr, __entry->len, __entry->used, __entry->flags, +__print_flags (__entry->flags,"|" ,BTRFS_GROUP_FLAGS ))
I've reorered the fields so they're sorted the same way in all 3 sections, as defined in the printk (bytenr, len, used, flags).