diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2022-09-28 10:04:48 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2022-10-03 23:55:54 -0400 |
commit | 5e93c5497ea78c5de38d5863881ab9cca78eca93 (patch) | |
tree | 39d3179f55c18489d274d0bd7e42fe5b2dae1de2 | |
parent | 8ce10d733352e2995295cd01bcd263304fbecd59 (diff) |
bcachefs: Fix bch2_backpointer_get_key()
We weren't returning -BCH_ERR_backpointer_to_overwritten_btree_node from
bch2_backpointer_get_node - oops.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/backpointers.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c index 029b1ec14283..955f3ee96cc0 100644 --- a/fs/bcachefs/backpointers.c +++ b/fs/bcachefs/backpointers.c @@ -529,14 +529,22 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans, bch2_trans_iter_exit(trans, iter); if (bp.level) { + struct btree *b; + /* * If a backpointer for a btree node wasn't found, it may be * because it was overwritten by a new btree node that hasn't * been written out yet - backpointer_get_node() checks for * this: */ - bch2_backpointer_get_node(trans, iter, bucket, bp_offset, bp); + b = bch2_backpointer_get_node(trans, iter, bucket, bp_offset, bp); + if (!IS_ERR_OR_NULL(b)) + return bkey_i_to_s_c(&b->key); + bch2_trans_iter_exit(trans, iter); + + if (IS_ERR(b)) + return bkey_s_c_err(PTR_ERR(b)); return bkey_s_c_null; } |