summaryrefslogtreecommitdiff
path: root/fs/bcachefs
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-07-22 18:26:04 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:43 -0400
commit4fe7efa17713e3d0eecbd106adff3d1b039cc554 (patch)
tree40df4e34f62e88ef54a2272ecde0d6253da9eeb0 /fs/bcachefs
parent988e98cfce26ecad20595cb52056759e798cd8de (diff)
bcachefs: Fix an error path
We were missing a 'goto retry' and continuing on with an error pointer. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r--fs/bcachefs/btree_update_interior.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index 81386b26f369..5317f29c2776 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -1869,7 +1869,7 @@ int bch2_btree_node_update_key(struct bch_fs *c, struct btree_iter *iter,
new_hash = bch2_btree_node_mem_alloc(c);
}
-
+retry:
as = bch2_btree_update_start(iter->trans, iter->btree_id,
parent ? btree_update_reserve_required(c, parent) : 0,
BTREE_INSERT_NOFAIL|
@@ -1882,16 +1882,17 @@ int bch2_btree_node_update_key(struct bch_fs *c, struct btree_iter *iter,
if (ret == -EAGAIN)
ret = -EINTR;
- if (ret != -EINTR)
- goto err;
+ if (ret == -EINTR) {
+ bch2_trans_unlock(iter->trans);
+ up_read(&c->gc_lock);
+ closure_sync(&cl);
+ down_read(&c->gc_lock);
- bch2_trans_unlock(iter->trans);
- up_read(&c->gc_lock);
- closure_sync(&cl);
- down_read(&c->gc_lock);
+ if (bch2_trans_relock(iter->trans))
+ goto retry;
+ }
- if (!bch2_trans_relock(iter->trans))
- goto err;
+ goto err;
}
ret = bch2_mark_bkey_replicas(c, bkey_i_to_s_c(new_key));