X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libbcachefs%2Fbackpointers.c;h=a97fc2b61ee2dc48e64180b253064a750f669381;hb=3070f45d968575efd42ecf44f94427203b2ab62e;hp=9b5f5809ba3798bd7ba2e3b5c0f072045ac14428;hpb=f27b135285d032d9570a1accb00412e111b38878;p=bcachefs-tools-debian diff --git a/libbcachefs/backpointers.c b/libbcachefs/backpointers.c index 9b5f580..a97fc2b 100644 --- a/libbcachefs/backpointers.c +++ b/libbcachefs/backpointers.c @@ -391,17 +391,12 @@ fsck_err: /* verify that every backpointer has a corresponding alloc key */ int bch2_check_btree_backpointers(struct bch_fs *c) { - struct btree_iter iter; - struct bkey_s_c k; - int ret; - - ret = bch2_trans_run(c, + int ret = bch2_trans_run(c, for_each_btree_key_commit(trans, iter, BTREE_ID_backpointers, POS_MIN, 0, k, NULL, NULL, BCH_TRANS_COMMIT_no_enospc, bch2_check_btree_backpointer(trans, &iter, k))); - if (ret) - bch_err_fn(c, ret); + bch_err_fn(c, ret); return ret; } @@ -417,8 +412,11 @@ static int check_bp_exists(struct btree_trans *trans, struct btree_iter bp_iter = { NULL }; struct printbuf buf = PRINTBUF; struct bkey_s_c bp_k; + struct bkey_buf tmp; int ret; + bch2_bkey_buf_init(&tmp); + if (bpos_lt(bucket, bucket_start) || bpos_gt(bucket, bucket_end)) return 0; @@ -438,6 +436,8 @@ static int check_bp_exists(struct btree_trans *trans, if (!bpos_eq(orig_k.k->p, last_flushed->k->k.p) || bkey_bytes(orig_k.k) != bkey_bytes(&last_flushed->k->k) || memcmp(orig_k.v, &last_flushed->k->v, bkey_val_bytes(orig_k.k))) { + bch2_bkey_buf_reassemble(&tmp, c, orig_k); + if (bp.level) { bch2_trans_unlock(trans); bch2_btree_interior_updates_flush(c); @@ -447,7 +447,7 @@ static int check_bp_exists(struct btree_trans *trans, if (ret) goto err; - bch2_bkey_buf_reassemble(last_flushed, c, orig_k); + bch2_bkey_buf_copy(last_flushed, c, tmp.k); ret = -BCH_ERR_transaction_restart_write_buffer_flush; goto out; } @@ -457,6 +457,7 @@ out: err: fsck_err: bch2_trans_iter_exit(trans, &bp_iter); + bch2_bkey_buf_exit(&tmp, c); printbuf_exit(&buf); return ret; missing: @@ -763,8 +764,7 @@ int bch2_check_extents_to_backpointers(struct bch_fs *c) } bch2_trans_put(trans); - if (ret) - bch_err_fn(c, ret); + bch_err_fn(c, ret); return ret; } @@ -818,8 +818,6 @@ static int bch2_check_backpointers_to_extents_pass(struct btree_trans *trans, struct bbpos start, struct bbpos end) { - struct btree_iter iter; - struct bkey_s_c k; struct bpos last_flushed_pos = SPOS_MAX; return for_each_btree_key_commit(trans, iter, BTREE_ID_backpointers, @@ -871,7 +869,6 @@ int bch2_check_backpointers_to_extents(struct bch_fs *c) } bch2_trans_put(trans); - if (ret) - bch_err_fn(c, ret); + bch_err_fn(c, ret); return ret; }