summaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_cache.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-11-24 22:57:01 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-12-21 01:36:19 -0500
commitabf23afa36eb425fb75d47c26fc665dbab2a9ae1 (patch)
tree48179e48c57cc07fc7c40741dd530d91ec585478 /fs/bcachefs/btree_cache.c
parent427db7ffe9a91bcad00a7bac4edcd74d75007a11 (diff)
downloadlinux-next-abf23afa36eb425fb75d47c26fc665dbab2a9ae1.tar.gz
linux-next-abf23afa36eb425fb75d47c26fc665dbab2a9ae1.zip
bcachefs: Fix btree node scan when unknown btree IDs are present
btree_root entries for unknown btree IDs are created during recovery, before reading those btree roots. But btree_node_scan may find btree nodes with unknown btree IDs when we haven't seen roots for those btrees. Reported-by: syzbot+1f202d4da221ec6ebf8e@syzkaller.appspotmail.com Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_cache.c')
-rw-r--r--fs/bcachefs/btree_cache.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c
index 36dfa6a48aa6..1f06e24e53fc 100644
--- a/fs/bcachefs/btree_cache.c
+++ b/fs/bcachefs/btree_cache.c
@@ -1406,9 +1406,14 @@ void bch2_btree_id_level_to_text(struct printbuf *out, enum btree_id btree, unsi
void bch2_btree_pos_to_text(struct printbuf *out, struct bch_fs *c, const struct btree *b)
{
bch2_btree_id_to_text(out, b->c.btree_id);
- prt_printf(out, " level %u/%u\n ",
- b->c.level,
- bch2_btree_id_root(c, b->c.btree_id)->level);
+ prt_printf(out, " level %u/", b->c.level);
+ struct btree_root *r = bch2_btree_id_root(c, b->c.btree_id);
+ if (r)
+ prt_printf(out, "%u", r->level);
+ else
+ prt_printf(out, "(unknown)");
+ prt_printf(out, "\n ");
+
bch2_bkey_val_to_text(out, c, bkey_i_to_s_c(&b->key));
}