bcachefs: Fix promotes
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 24 Dec 2023 04:29:05 +0000 (23:29 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 27 Dec 2023 00:31:11 +0000 (19:31 -0500)
The recent work to fix data moves w.r.t. durability broke promotes,
because the caused us to bail out when the extent minus pointers being
dropped still has enough pointers to satisfy the current number of
replicas.

Disable this check when we're adding cached replicas.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/data_update.c

index b05457d..37d6eca 100644 (file)
@@ -587,7 +587,8 @@ int bch2_data_update_init(struct btree_trans *trans,
         * Increasing replication is an explicit operation triggered by
         * rereplicate, currently, so that users don't get an unexpected -ENOSPC
         */
-       if (durability_have >= io_opts.data_replicas) {
+       if (!(m->data_opts.write_flags & BCH_WRITE_CACHED) &&
+           durability_have >= io_opts.data_replicas) {
                m->data_opts.kill_ptrs |= m->data_opts.rewrite_ptrs;
                m->data_opts.rewrite_ptrs = 0;
                /* if iter == NULL, it's just a promote */