summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/btree_node_scan.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-06-25 12:45:11 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-06-26 00:01:16 -0400
commit3e72acb78b73ccffeaf929c039dc5a0a7a147535 (patch)
tree5a32bd0ae84c907d929172f5f883f4c71a5e3025 /fs/bcachefs/btree_node_scan.c
parentbcachefs: btree_root_unreadable_and_scan_found_nothing should not be autofix (diff)
downloadlinux-3e72acb78b73ccffeaf929c039dc5a0a7a147535.tar.gz
linux-3e72acb78b73ccffeaf929c039dc5a0a7a147535.zip
bcachefs: Ensure btree node scan runs before checking for scanned nodes
Previously, calling bch2_btree_has_scanned_nodes() when btree node scan hadn't actually run would erroniously return false - causing us to think a btree was entirely gone. This fixes a 6.16 regression from moving the scheduling of btree node scan out of bch2_btree_lost_data() (fixing the bug where we'd schedule it persistently in the superblock) and only scheduling it when check_toploogy() is asking for scanned btree nodes. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_node_scan.c')
-rw-r--r--fs/bcachefs/btree_node_scan.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_node_scan.c b/fs/bcachefs/btree_node_scan.c
index a35847734a60..23d8c62ea4b6 100644
--- a/fs/bcachefs/btree_node_scan.c
+++ b/fs/bcachefs/btree_node_scan.c
@@ -521,8 +521,12 @@ bool bch2_btree_node_is_stale(struct bch_fs *c, struct btree *b)
return false;
}
-bool bch2_btree_has_scanned_nodes(struct bch_fs *c, enum btree_id btree)
+int bch2_btree_has_scanned_nodes(struct bch_fs *c, enum btree_id btree)
{
+ int ret = bch2_run_print_explicit_recovery_pass(c, BCH_RECOVERY_PASS_scan_for_btree_nodes);
+ if (ret)
+ return ret;
+
struct found_btree_node search = {
.btree_id = btree,
.level = 0,