]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
bcachefs: Make __bch2_bkey_cmp_packed() smaller
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 7 Nov 2019 20:03:09 +0000 (15:03 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:31 +0000 (17:08 -0400)
We can probably get rid of the version that dispatches based on type
checking too.

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

index dd551cc3a162ad86ac4ee5b0a71acdd9c664883a..32e4917dc00471b33fd54052e7612474dd5ee8bf 100644 (file)
@@ -1061,26 +1061,20 @@ int __bch2_bkey_cmp_packed(const struct bkey_packed *l,
                           const struct bkey_packed *r,
                           const struct btree *b)
 {
-       int packed = bkey_lr_packed(l, r);
+       struct bkey unpacked;
 
-       if (likely(packed == BKEY_PACKED_BOTH))
+       if (likely(bkey_packed(l) && bkey_packed(r)))
                return __bch2_bkey_cmp_packed_format_checked(l, r, b);
 
-       switch (packed) {
-       case BKEY_PACKED_NONE:
-               return bkey_cmp(((struct bkey *) l)->p,
-                               ((struct bkey *) r)->p);
-       case BKEY_PACKED_LEFT:
-               return __bch2_bkey_cmp_left_packed_format_checked(b,
-                                 (struct bkey_packed *) l,
-                                 &((struct bkey *) r)->p);
-       case BKEY_PACKED_RIGHT:
-               return -__bch2_bkey_cmp_left_packed_format_checked(b,
-                                 (struct bkey_packed *) r,
-                                 &((struct bkey *) l)->p);
-       default:
-               unreachable();
+       if (bkey_packed(l)) {
+               __bkey_unpack_key_format_checked(b, &unpacked, l);
+               l = (void*) &unpacked;
+       } else if (bkey_packed(r)) {
+               __bkey_unpack_key_format_checked(b, &unpacked, r);
+               r = (void*) &unpacked;
        }
+
+       return bkey_cmp(((struct bkey *) l)->p, ((struct bkey *) r)->p);
 }
 
 __pure __flatten