bcachefs: Fix unhandled transaction restart in evacuate_bucket()

Generally, releasing a transaction within a transaction restart means an
unhandled transaction restart: but this can happen legitimately within
the move code, e.g. when bch2_move_ratelimit() tells us to exit before
we've retried.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2024-11-07 22:00:05 -05:00
parent b09b34499c
commit 69785001c6

View File

@ -197,6 +197,13 @@ void bch2_moving_ctxt_exit(struct moving_context *ctxt)
list_del(&ctxt->list);
mutex_unlock(&c->moving_context_lock);
/*
* Generally, releasing a transaction within a transaction restart means
* an unhandled transaction restart: but this can happen legitimately
* within the move code, e.g. when bch2_move_ratelimit() tells us to
* exit before we've retried
*/
bch2_trans_begin(ctxt->trans);
bch2_trans_put(ctxt->trans);
memset(ctxt, 0, sizeof(*ctxt));
}