ret = bch2_trans_commit(trans, disk_res, journal_seq,
BTREE_INSERT_NOCHECK_RW|
BTREE_INSERT_NOFAIL|
- BTREE_INSERT_ATOMIC|
BTREE_INSERT_USE_RESERVE);
if (!ret && i_sectors_delta)
*i_sectors_delta += delta;
bch2_disk_reservation_init(c, 0);
struct bkey_i delete;
+ bch2_trans_reset(trans, TRANS_RESET_MEM);
+
ret = bkey_err(k);
if (ret)
goto btree_err;
bch2_key_resize(&delete.k, max_sectors);
bch2_cut_back(end, &delete);
- bch2_trans_begin_updates(trans);
-
ret = bch2_extent_update(trans, iter, &delete,
&disk_res, journal_seq,
0, i_sectors_delta);
BTREE_ITER_SLOTS|BTREE_ITER_INTENT);
do {
+ bch2_trans_reset(&trans, TRANS_RESET_MEM);
+
k = bch2_keylist_front(keys);
bkey_on_stack_realloc(&sk, c, k->k.u64s);
bkey_copy(sk.k, k);
bch2_cut_front(iter->pos, sk.k);
- bch2_trans_begin_updates(&trans);
-
ret = bch2_extent_update(&trans, iter, sk.k,
&op->res, op_journal_seq(op),
op->new_i_size, &op->i_sectors_delta);
bch2_time_stats_update(&c->times[BCH_TIME_data_write], op->start_time);
- if (op->end_io)
+ if (op->end_io) {
+ EBUG_ON(cl->parent);
+ closure_debug_destroy(cl);
op->end_io(op);
- if (cl->parent)
+ } else {
closure_return(cl);
- else
- closure_debug_destroy(cl);
+ }
}
/**
err:
if (!(op->flags & BCH_WRITE_NOPUT_RESERVATION))
bch2_disk_reservation_put(c, &op->res);
- if (op->end_io)
+
+ if (op->end_io) {
+ EBUG_ON(cl->parent);
+ closure_debug_destroy(cl);
op->end_io(op);
- if (cl->parent)
+ } else {
closure_return(cl);
- else
- closure_debug_destroy(cl);
+ }
}
/* Cache promotion on read */
bch2_trans_update(&trans, iter, new.k);
ret = bch2_trans_commit(&trans, NULL, NULL,
- BTREE_INSERT_ATOMIC|
BTREE_INSERT_NOFAIL|
BTREE_INSERT_NOWAIT);
if (ret == -EINTR)