summaryrefslogtreecommitdiff
path: root/fs/bcachefs/ec.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/ec.c')
-rw-r--r--fs/bcachefs/ec.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c
index 3b3b931dc6c9..ae07af49af02 100644
--- a/fs/bcachefs/ec.c
+++ b/fs/bcachefs/ec.c
@@ -1235,6 +1235,7 @@ static int __bch2_stripe_write_key(struct btree_trans *trans,
bch2_trans_update(trans, iter, &new_key->k_i);
return bch2_trans_commit(trans, NULL, NULL,
+ BTREE_INSERT_ATOMIC|
BTREE_INSERT_NOFAIL|flags);
}
@@ -1259,8 +1260,13 @@ int bch2_stripes_write(struct bch_fs *c, unsigned flags, bool *wrote)
if (!m->dirty)
continue;
- ret = __bch2_stripe_write_key(&trans, iter, m, giter.pos,
- new_key, flags);
+ do {
+ bch2_trans_reset(&trans, TRANS_RESET_MEM);
+
+ ret = __bch2_stripe_write_key(&trans, iter, m,
+ giter.pos, new_key, flags);
+ } while (ret == -EINTR);
+
if (ret)
break;