diff options
| author | Leo Martins <loemra.dev@gmail.com> | 2025-08-12 16:04:41 -0700 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2025-09-22 10:54:32 +0200 |
| commit | 46d33a0cc484ceb11aa47166e66d349ab3074eef (patch) | |
| tree | 7be69aa3d579c3a8782110bff4b7ecc32549af8f /fs/btrfs/delayed-inode.h | |
| parent | b767a28d6154986929a2231d48b637b18b2aabb3 (diff) | |
btrfs: add mount option for ref_tracker
The ref_tracker infrastructure aids debugging but is not enabled by
default as it has a performance impact. Add mount option 'ref_tracker'
so it can be selectively enabled on a filesystem. Currently it track
references of 'delayed inodes'.
Signed-off-by: Leo Martins <loemra.dev@gmail.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/delayed-inode.h')
| -rw-r--r-- | fs/btrfs/delayed-inode.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/btrfs/delayed-inode.h b/fs/btrfs/delayed-inode.h index 7f2db9905aea..0d949edc0caf 100644 --- a/fs/btrfs/delayed-inode.h +++ b/fs/btrfs/delayed-inode.h @@ -198,6 +198,9 @@ void btrfs_assert_delayed_root_empty(struct btrfs_fs_info *fs_info); #ifdef CONFIG_BTRFS_DEBUG static inline void btrfs_delayed_node_ref_tracker_dir_init(struct btrfs_delayed_node *node) { + if (!btrfs_test_opt(node->root->fs_info, REF_TRACKER)) + return; + ref_tracker_dir_init(&node->ref_dir.dir, BTRFS_DELAYED_NODE_REF_TRACKER_QUARANTINE_COUNT, "delayed_node"); @@ -205,11 +208,17 @@ static inline void btrfs_delayed_node_ref_tracker_dir_init(struct btrfs_delayed_ static inline void btrfs_delayed_node_ref_tracker_dir_exit(struct btrfs_delayed_node *node) { + if (!btrfs_test_opt(node->root->fs_info, REF_TRACKER)) + return; + ref_tracker_dir_exit(&node->ref_dir.dir); } static inline void btrfs_delayed_node_ref_tracker_dir_print(struct btrfs_delayed_node *node) { + if (!btrfs_test_opt(node->root->fs_info, REF_TRACKER)) + return; + ref_tracker_dir_print(&node->ref_dir.dir, BTRFS_DELAYED_NODE_REF_TRACKER_DISPLAY_LIMIT); } @@ -218,12 +227,18 @@ static inline int btrfs_delayed_node_ref_tracker_alloc(struct btrfs_delayed_node struct btrfs_ref_tracker *tracker, gfp_t gfp) { + if (!btrfs_test_opt(node->root->fs_info, REF_TRACKER)) + return 0; + return ref_tracker_alloc(&node->ref_dir.dir, &tracker->tracker, gfp); } static inline int btrfs_delayed_node_ref_tracker_free(struct btrfs_delayed_node *node, struct btrfs_ref_tracker *tracker) { + if (!btrfs_test_opt(node->root->fs_info, REF_TRACKER)) + return 0; + return ref_tracker_free(&node->ref_dir.dir, &tracker->tracker); } #else |