summaryrefslogtreecommitdiff
path: root/fs/bcachefs/move.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-10-24 17:00:33 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:09:15 -0400
commit23af498cc44bc7615f3f208f39daab637bcac023 (patch)
tree566392be16fd12a64ef420306940a3829ff02f54 /fs/bcachefs/move.c
parentf3cf0999ac1c70676ba2b4d3db7b6f02f213a2d7 (diff)
downloadlwn-23af498cc44bc7615f3f208f39daab637bcac023.tar.gz
lwn-23af498cc44bc7615f3f208f39daab637bcac023.zip
bcachefs: Ensure we flush btree updates in evacuate path
This fixes a possible race where we fail to remove a device because of btree nodes still on it, that are being deleted by in flight btree updates. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/move.c')
-rw-r--r--fs/bcachefs/move.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index 1d7b8696af01..5f50b66fe206 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -932,6 +932,10 @@ next:
if (ret)
bch_err(c, "error %i in bch2_move_btree", ret);
+ /* flush relevant btree updates */
+ closure_wait_event(&c->btree_interior_update_wait,
+ !bch2_btree_interior_updates_nr_pending(c));
+
progress_list_del(c, stats);
return ret;
}
@@ -1075,10 +1079,6 @@ int bch2_data_job(struct bch_fs *c,
op.start_btree, op.start_pos,
op.end_btree, op.end_pos,
rereplicate_btree_pred, c, stats) ?: ret;
-
- closure_wait_event(&c->btree_interior_update_wait,
- !bch2_btree_interior_updates_nr_pending(c));
-
ret = bch2_replicas_gc2(c) ?: ret;
ret = bch2_move_data(c,