diff options
Diffstat (limited to 'fs/bcachefs/data_update.c')
-rw-r--r-- | fs/bcachefs/data_update.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/bcachefs/data_update.c b/fs/bcachefs/data_update.c index 894ba0944fea..62d5d17d681e 100644 --- a/fs/bcachefs/data_update.c +++ b/fs/bcachefs/data_update.c @@ -91,8 +91,10 @@ bool __bkey_nocow_lock(struct bch_fs *c, struct moving_context *ctxt, struct bke move_ctxt_wait_event(ctxt, (locked = bch2_bucket_nocow_trylock(&c->nocow_locks, bucket, 0)) || list_empty(&ctxt->ios)); - if (!locked) + if (!locked) { + bch2_trans_unlock(ctxt->trans); bch2_bucket_nocow_lock(&c->nocow_locks, bucket, 0); + } } return true; } @@ -449,8 +451,8 @@ restart_drop_extra_replicas: if (trace_data_update_enabled()) trace_data_update2(m, old, k, insert); - if (bch2_bkey_needs_rb(bkey_i_to_s_c(insert)) && - !bch2_bkey_needs_rb(k)) + if (bch2_bkey_sectors_need_rebalance(c, bkey_i_to_s_c(insert)) * k.k->size > + bch2_bkey_sectors_need_rebalance(c, k) * insert->k.size) trace_io_move_created_rebalance2(m, old, k, insert); ret = bch2_trans_commit(trans, &op->res, |