]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Ensure we flush btree updates in evacuate path
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 24 Oct 2021 21:00:33 +0000 (17:00 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:15 +0000 (17:09 -0400)
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>
fs/bcachefs/move.c

index 1d7b8696af0173f36cf05ab85eb22396a76208a5..5f50b66fe2063de94536b31a8b252235e95e176e 100644 (file)
@@ -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,