summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-05-11 11:31:17 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-06-09 15:37:03 -0400
commit88c987cb4142a51acec986b0145181bb29ff0c4c (patch)
treee85d5d82f0fc65562825c315aaa9dd3c1ac1e25e
parentbe6d7fb8d1516417e5fe985bbc63c7bdcd1d46c0 (diff)
bcachefs: Improve backpointer_get_key()
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/backpointers.c37
1 files changed, 15 insertions, 22 deletions
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c
index 18af3dfbf26a..1509b00018db 100644
--- a/fs/bcachefs/backpointers.c
+++ b/fs/bcachefs/backpointers.c
@@ -418,10 +418,9 @@ out:
return ret;
}
-struct bkey_s_c __bch2_backpointer_get_key(struct btree_trans *trans,
- struct btree_iter *iter,
- struct bch_backpointer bp,
- bool in_fsck)
+struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans,
+ struct btree_iter *iter,
+ struct bch_backpointer bp)
{
struct bch_fs *c = trans->c;
struct bkey_ptrs_c ptrs;
@@ -457,27 +456,21 @@ struct bkey_s_c __bch2_backpointer_get_key(struct btree_trans *trans,
return k;
}
- if (!in_fsck) {
- prt_printf(&buf, "backpointer doesn't match extent it points to:\n ");
- bch2_backpointer_to_text(&buf, &bp);
- prt_printf(&buf, "\n ");
- bch2_bkey_val_to_text(&buf, c, k);
- bch2_trans_inconsistent(trans, "%s", buf.buf);
+ prt_printf(&buf, "backpointer doesn't match extent it points to:\n ");
+ bch2_backpointer_to_text(&buf, &bp);
+ prt_printf(&buf, "\n ");
+ bch2_bkey_val_to_text(&buf, c, k);
- bch2_trans_iter_exit(trans, iter);
- }
+ if (!test_bit(BCH_FS_CHECK_BACKPOINTERS_DONE, &c->flags))
+ bch_err(c, "%s", buf.buf);
+ else
+ bch2_trans_inconsistent(trans, "%s", buf.buf);
+ bch2_trans_iter_exit(trans, iter);
printbuf_exit(&buf);
return bkey_s_c_null;
}
-struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans,
- struct btree_iter *iter,
- struct bch_backpointer bp)
-{
- return __bch2_backpointer_get_key(trans, iter, bp, false);
-}
-
struct btree *bch2_backpointer_get_node(struct btree_trans *trans,
struct btree_iter *iter,
struct bch_backpointer bp)
@@ -810,14 +803,14 @@ static int check_one_backpointer(struct btree_trans *trans,
if (ret || *bp_offset == U64_MAX)
return ret;
- k = __bch2_backpointer_get_key(trans, &iter, bp, true);
+ k = bch2_backpointer_get_key(trans, &iter, bp);
ret = bkey_err(k);
if (ret)
return ret;
if (fsck_err_on(!k.k, trans->c,
- "backpointer offset %llu points to missing extent\n%s",
- *bp_offset,
+ "%s backpointer points to missing extent\n%s",
+ *bp_offset < BACKPOINTER_OFFSET_MAX ? "alloc" : "btree",
(bch2_backpointer_to_text(&buf, &bp), buf.buf))) {
ret = bch2_backpointer_del_by_offset(trans, alloc_pos, *bp_offset);
if (ret == -ENOENT)