diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-10-24 17:00:33 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:15 -0400 |
commit | 23af498cc44bc7615f3f208f39daab637bcac023 (patch) | |
tree | 566392be16fd12a64ef420306940a3829ff02f54 /fs/bcachefs/move.c | |
parent | f3cf0999ac1c70676ba2b4d3db7b6f02f213a2d7 (diff) | |
download | lwn-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.c | 8 |
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, |