Skip to content

Commit 2b73cae

Browse files
loemrawkdave
authored andcommitted
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 <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent a5de0e4 commit 2b73cae

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

fs/btrfs/delayed-inode.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2115,6 +2115,7 @@ void btrfs_kill_all_delayed_nodes(struct btrfs_root *root)
21152115
__btrfs_kill_delayed_node(delayed_nodes[i]);
21162116
btrfs_release_delayed_node(delayed_nodes[i],
21172117
&delayed_node_trackers[i]);
2118+
btrfs_delayed_node_ref_tracker_dir_print(delayed_nodes[i]);
21182119
}
21192120
}
21202121
}

fs/btrfs/delayed-inode.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,12 @@ static inline void btrfs_delayed_node_ref_tracker_dir_exit(struct btrfs_delayed_
208208
ref_tracker_dir_exit(&node->ref_dir.dir);
209209
}
210210

211+
static inline void btrfs_delayed_node_ref_tracker_dir_print(struct btrfs_delayed_node *node)
212+
{
213+
ref_tracker_dir_print(&node->ref_dir.dir,
214+
BTRFS_DELAYED_NODE_REF_TRACKER_DISPLAY_LIMIT);
215+
}
216+
211217
static inline int btrfs_delayed_node_ref_tracker_alloc(struct btrfs_delayed_node *node,
212218
struct btrfs_ref_tracker *tracker,
213219
gfp_t gfp)
@@ -225,6 +231,8 @@ static inline void btrfs_delayed_node_ref_tracker_dir_init(struct btrfs_delayed_
225231

226232
static inline void btrfs_delayed_node_ref_tracker_dir_exit(struct btrfs_delayed_node *node) { }
227233

234+
static inline void btrfs_delayed_node_ref_tracker_dir_print(struct btrfs_delayed_node *node) { }
235+
228236
static inline int btrfs_delayed_node_ref_tracker_alloc(struct btrfs_delayed_node *node,
229237
struct btrfs_ref_tracker *tracker,
230238
gfp_t gfp)

0 commit comments

Comments
 (0)