summaryrefslogtreecommitdiff
path: root/libbcachefs/move.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-02-13 15:51:27 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-02-13 15:51:27 -0500
commit1b2d60826974e31b9894b6d5aa59b0e7e62823cd (patch)
treeb0843bde9b859eab87520b88f7ddb8a4ccfe6cb8 /libbcachefs/move.c
parent4697efb7a01affe650dbc9a4e81a8203d0316d96 (diff)
Update bcachefs sources to 8dbfede1d9 fixup! bcachefs: More info on check_bucket_ref() error
Diffstat (limited to 'libbcachefs/move.c')
-rw-r--r--libbcachefs/move.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/libbcachefs/move.c b/libbcachefs/move.c
index 7e7e9042..e7eb55bd 100644
--- a/libbcachefs/move.c
+++ b/libbcachefs/move.c
@@ -584,7 +584,7 @@ int bch2_move_data(struct bch_fs *c,
return ret;
}
-static int verify_bucket_evacuated(struct btree_trans *trans, struct bpos bucket, int gen)
+static noinline void verify_bucket_evacuated(struct btree_trans *trans, struct bpos bucket, int gen)
{
struct bch_fs *c = trans->c;
struct btree_iter iter;
@@ -597,8 +597,8 @@ static int verify_bucket_evacuated(struct btree_trans *trans, struct bpos bucket
bch2_trans_iter_init(trans, &iter, BTREE_ID_alloc,
bucket, BTREE_ITER_CACHED);
again:
- k = bch2_btree_iter_peek_slot(&iter);
- ret = bkey_err(k);
+ ret = lockrestart_do(trans,
+ bkey_err(k = bch2_btree_iter_peek_slot(&iter)));
if (!ret && k.k->type == KEY_TYPE_alloc_v4) {
struct bkey_s_c_alloc_v4 a = bkey_s_c_to_alloc_v4(k);
@@ -615,7 +615,7 @@ again:
}
bch2_trans_iter_exit(trans, &iter);
- return ret;
+ return;
failed_to_evacuate:
bch2_trans_iter_exit(trans, &iter);
@@ -651,7 +651,6 @@ failed_to_evacuate:
bch2_print_string_as_lines(KERN_ERR, buf.buf);
printbuf_exit(&buf);
- return 0;
}
int __bch2_evacuate_bucket(struct moving_context *ctxt,
@@ -800,7 +799,7 @@ next:
move_ctxt_wait_event(ctxt, NULL, list_empty(&ctxt->reads));
closure_sync(&ctxt->cl);
if (!ctxt->write_error)
- lockrestart_do(&trans, verify_bucket_evacuated(&trans, bucket, gen));
+ verify_bucket_evacuated(&trans, bucket, gen);
}
err:
bch2_trans_exit(&trans);