bcachefs: Fix rereplicate_pred()
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 12 Oct 2021 18:15:45 +0000 (14:15 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:13 +0000 (17:09 -0400)
It was switching off of the key type incorrectly - this code must've
been quite old, and not rereplicating anything that wasn't a
btree_ptr_v1 or a plain old extent.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/move.c

index 5e61cd431ef9138cea4372dbeca868a2cfe3cf95..fbb6c043ad9bd67ce5e56456b7797551dddf7c04 100644 (file)
@@ -946,16 +946,9 @@ static enum data_cmd rereplicate_pred(struct bch_fs *c, void *arg,
                                      struct data_opts *data_opts)
 {
        unsigned nr_good = bch2_bkey_durability(c, k);
-       unsigned replicas = 0;
-
-       switch (k.k->type) {
-       case KEY_TYPE_btree_ptr:
-               replicas = c->opts.metadata_replicas;
-               break;
-       case KEY_TYPE_extent:
-               replicas = io_opts->data_replicas;
-               break;
-       }
+       unsigned replicas = bkey_is_btree_ptr(k.k)
+               ? c->opts.metadata_replicas
+               : io_opts->data_replicas;
 
        if (!nr_good || nr_good >= replicas)
                return DATA_SKIP;