From: Leo Martins Date: Tue, 12 Aug 2025 23:04:40 +0000 (-0700) Subject: btrfs: print leaked references in kill_all_delayed_nodes() X-Git-Tag: v6.18-rc1~204^2~90 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b767a28d6154986929a2231d48b637b18b2aabb3;p=thirdparty%2Fkernel%2Fstable.git btrfs: print leaked references in kill_all_delayed_nodes() We are seeing soft lockups in kill_all_delayed_nodes due to a delayed_node with a lingering reference count of 1. Printing at this point will reveal the guilty stack trace. If the delayed_node has no references there should be no output. Signed-off-by: Leo Martins Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 364814642a91d..6adfe62cd0c4d 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -2112,6 +2112,7 @@ void btrfs_kill_all_delayed_nodes(struct btrfs_root *root) __btrfs_kill_delayed_node(delayed_nodes[i]); btrfs_release_delayed_node(delayed_nodes[i], &delayed_node_trackers[i]); + btrfs_delayed_node_ref_tracker_dir_print(delayed_nodes[i]); } } } diff --git a/fs/btrfs/delayed-inode.h b/fs/btrfs/delayed-inode.h index 93149c32d3fa4..7f2db9905aeae 100644 --- a/fs/btrfs/delayed-inode.h +++ b/fs/btrfs/delayed-inode.h @@ -208,6 +208,12 @@ static inline void btrfs_delayed_node_ref_tracker_dir_exit(struct btrfs_delayed_ ref_tracker_dir_exit(&node->ref_dir.dir); } +static inline void btrfs_delayed_node_ref_tracker_dir_print(struct btrfs_delayed_node *node) +{ + ref_tracker_dir_print(&node->ref_dir.dir, + BTRFS_DELAYED_NODE_REF_TRACKER_DISPLAY_LIMIT); +} + static inline int btrfs_delayed_node_ref_tracker_alloc(struct btrfs_delayed_node *node, struct btrfs_ref_tracker *tracker, gfp_t gfp) @@ -225,6 +231,8 @@ 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) { } +static inline void btrfs_delayed_node_ref_tracker_dir_print(struct btrfs_delayed_node *node) { } + static inline int btrfs_delayed_node_ref_tracker_alloc(struct btrfs_delayed_node *node, struct btrfs_ref_tracker *tracker, gfp_t gfp)