summaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_update_interior.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2022-09-23 21:00:24 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-06-20 22:52:13 -0400
commit3276f652b382c1c24deca8140595cca8660604d9 (patch)
treecea4bd5ea6ec30e3f86b96cee8d7aa6e07ae373f /fs/bcachefs/btree_update_interior.c
parente3281c963ca57ce0176531726b0f96694faead51 (diff)
bcachefs: Fix blocking with locks held
This is a major oopsy - we should always be unlocking before calling closure_sync(), else we'll cause a deadlock. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_update_interior.c')
-rw-r--r--fs/bcachefs/btree_update_interior.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index 7a682c1751b3..797efa738dc4 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -1117,10 +1117,10 @@ bch2_btree_update_start(struct btree_trans *trans, struct btree_path *path,
closure_init_stack(&cl);
- bch2_trans_unlock(trans);
-
do {
ret = bch2_btree_reserve_get(trans, as, nr_nodes, flags, &cl);
+
+ bch2_trans_unlock(trans);
closure_sync(&cl);
} while (ret == -EAGAIN);
}