bcachefs: Don't call bch2_bkey_transform() unnecessarily
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 20 Dec 2021 00:01:41 +0000 (19:01 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:19 +0000 (17:09 -0400)
If the packed format isn't changing, there's no need to call
bch2_bkey_transform().

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

index da0b7a63b146a8ce7515e5dc464af37a92dd3993..b1385a77da1146f6efd643d389a73aa999745244 100644 (file)
@@ -127,6 +127,7 @@ bch2_sort_repack(struct bset *dst, struct btree *src,
        struct bkey_format *in_f = &src->format;
        struct bkey_packed *in, *out = vstruct_last(dst);
        struct btree_nr_keys nr;
+       bool transform = memcmp(out_f, &src->format, sizeof(*out_f));
 
        memset(&nr, 0, sizeof(nr));
 
@@ -134,8 +135,10 @@ bch2_sort_repack(struct bset *dst, struct btree *src,
                if (filter_whiteouts && bkey_deleted(in))
                        continue;
 
-               if (bch2_bkey_transform(out_f, out, bkey_packed(in)
-                                      ? in_f : &bch2_bkey_format_current, in))
+               if (!transform)
+                       bkey_copy(out, in);
+               else if (bch2_bkey_transform(out_f, out, bkey_packed(in)
+                                            ? in_f : &bch2_bkey_format_current, in))
                        out->format = KEY_FORMAT_LOCAL_BTREE;
                else
                        bch2_bkey_unpack(src, (void *) out, in);