diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-05-16 18:14:43 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-06-09 15:37:03 -0400 |
commit | dda802eeadeb40f82ffe9d76ff930afa4ba09416 (patch) | |
tree | 4b70e7de56f84544a0a761f20d965a9a984539ff | |
parent | 9f9c5648e334804172defe1f89e200ef9ecb1d9c (diff) |
bcachefs: Improve bch2_backpointer_get_key() error message
We need to include the alloc pos for grepping through the journal.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/backpointers.c | 14 | ||||
-rw-r--r-- | fs/bcachefs/backpointers.h | 4 | ||||
-rw-r--r-- | fs/bcachefs/move.c | 3 |
3 files changed, 15 insertions, 6 deletions
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c index bafb6baee122..17bd9fef3c1a 100644 --- a/fs/bcachefs/backpointers.c +++ b/fs/bcachefs/backpointers.c @@ -465,6 +465,9 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans, } prt_printf(&buf, "backpointer doesn't match extent it points to:\n "); + prt_printf(&buf, "bucket: "); + bch2_bpos_to_text(&buf, alloc_pos); + prt_printf(&buf, "\n "); bch2_backpointer_to_text(&buf, &bp); prt_printf(&buf, "\n "); bch2_bkey_val_to_text(&buf, c, k); @@ -481,6 +484,7 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans, struct btree *bch2_backpointer_get_node(struct btree_trans *trans, struct btree_iter *iter, + struct bpos alloc_pos, struct bch_backpointer bp) { struct bch_fs *c = trans->c; @@ -509,12 +513,13 @@ struct btree *bch2_backpointer_get_node(struct btree_trans *trans, k = bkey_i_to_s_c(&b->key); ptrs = bch2_bkey_ptrs_c(k); bkey_for_each_ptr_decode(k.k, ptrs, p, entry) { - struct bpos bucket_pos; + struct bpos alloc_pos2; struct bch_backpointer bp2; bch2_pointer_to_bucket_and_backpointer(c, bp.btree_id, bp.level, - k, p, &bucket_pos, &bp2); - if (!memcmp(&bp, &bp2, sizeof(bp))) + k, p, &alloc_pos2, &bp2); + if (!bpos_cmp(alloc_pos, alloc_pos2) && + !memcmp(&bp, &bp2, sizeof(bp))) return b; } @@ -522,6 +527,9 @@ struct btree *bch2_backpointer_get_node(struct btree_trans *trans, goto out; prt_printf(&buf, "backpointer doesn't match btree node it points to:\n "); + prt_printf(&buf, "bucket: "); + bch2_bpos_to_text(&buf, alloc_pos); + prt_printf(&buf, "\n "); bch2_backpointer_to_text(&buf, &bp); prt_printf(&buf, "\n "); bch2_bkey_val_to_text(&buf, c, k); diff --git a/fs/bcachefs/backpointers.h b/fs/bcachefs/backpointers.h index e175dfbcf025..beb40fdac602 100644 --- a/fs/bcachefs/backpointers.h +++ b/fs/bcachefs/backpointers.h @@ -28,8 +28,8 @@ int bch2_get_next_backpointer(struct btree_trans *, unsigned, u64, int, u64 *, struct bch_backpointer *); struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *, struct btree_iter *, struct bpos, struct bch_backpointer); -struct btree *bch2_backpointer_get_node(struct btree_trans *, - struct btree_iter *, struct bch_backpointer); +struct btree *bch2_backpointer_get_node(struct btree_trans *, struct btree_iter *, + struct bpos, struct bch_backpointer); int bch2_check_backpointers(struct bch_fs *); int bch2_check_extents_to_backpointers(struct bch_fs *); diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c index 6092919125aa..aeba91ad65a8 100644 --- a/fs/bcachefs/move.c +++ b/fs/bcachefs/move.c @@ -961,7 +961,8 @@ int bch2_evacuate_bucket(struct bch_fs *c, } else { struct btree *b; - b = bch2_backpointer_get_node(&trans, &iter, bp); + b = bch2_backpointer_get_node(&trans, &iter, + POS(ca->dev_idx, bucket), bp); ret = PTR_ERR_OR_ZERO(b); if (ret == -EINTR) continue; |