summaryrefslogtreecommitdiff
path: root/libbcachefs/ec.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/ec.c')
-rw-r--r--libbcachefs/ec.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/libbcachefs/ec.c b/libbcachefs/ec.c
index bd813ddf..bb019387 100644
--- a/libbcachefs/ec.c
+++ b/libbcachefs/ec.c
@@ -741,6 +741,8 @@ found_slot:
ret = bch2_trans_commit(&trans, NULL, NULL,
BTREE_INSERT_NOFAIL);
err:
+ bch2_trans_iter_put(&trans, iter);
+
if (ret == -EINTR)
goto retry;
@@ -1201,8 +1203,7 @@ static int __bch2_stripe_write_key(struct btree_trans *trans,
struct btree_iter *iter,
struct stripe *m,
size_t idx,
- struct bkey_i_stripe *new_key,
- unsigned flags)
+ struct bkey_i_stripe *new_key)
{
struct bch_fs *c = trans->c;
struct bkey_s_c k;
@@ -1231,9 +1232,7 @@ static int __bch2_stripe_write_key(struct btree_trans *trans,
spin_unlock(&c->ec_stripes_heap_lock);
bch2_trans_update(trans, iter, &new_key->k_i, 0);
-
- return bch2_trans_commit(trans, NULL, NULL,
- BTREE_INSERT_NOFAIL|flags);
+ return 0;
}
int bch2_stripes_write(struct bch_fs *c, unsigned flags, bool *wrote)
@@ -1257,12 +1256,10 @@ int bch2_stripes_write(struct bch_fs *c, unsigned flags, bool *wrote)
if (!m->dirty)
continue;
- do {
- bch2_trans_reset(&trans, TRANS_RESET_MEM);
-
- ret = __bch2_stripe_write_key(&trans, iter, m,
- giter.pos, new_key, flags);
- } while (ret == -EINTR);
+ ret = __bch2_trans_do(&trans, NULL, NULL,
+ BTREE_INSERT_NOFAIL|flags,
+ __bch2_stripe_write_key(&trans, iter, m,
+ giter.pos, new_key));
if (ret)
break;