]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bcachefs: debug_check_bkey_unpack
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 10 May 2025 19:53:10 +0000 (15:53 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 May 2025 00:14:55 +0000 (20:14 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bkey.c

index 995ba32e9b6e4a4b4e9f2b9788428e8396a92648..ee823c640642b4a619ee51d190cd5708955236c8 100644 (file)
@@ -47,11 +47,9 @@ void bch2_bkey_packed_to_binary_text(struct printbuf *out,
        }
 }
 
-#ifdef CONFIG_BCACHEFS_DEBUG
-
-static void bch2_bkey_pack_verify(const struct bkey_packed *packed,
-                                 const struct bkey *unpacked,
-                                 const struct bkey_format *format)
+static void __bch2_bkey_pack_verify(const struct bkey_packed *packed,
+                                   const struct bkey *unpacked,
+                                   const struct bkey_format *format)
 {
        struct bkey tmp;
 
@@ -95,11 +93,13 @@ static void bch2_bkey_pack_verify(const struct bkey_packed *packed,
        }
 }
 
-#else
 static inline void bch2_bkey_pack_verify(const struct bkey_packed *packed,
-                                       const struct bkey *unpacked,
-                                       const struct bkey_format *format) {}
-#endif
+                                        const struct bkey *unpacked,
+                                        const struct bkey_format *format)
+{
+       if (static_branch_unlikely(&bch2_debug_check_bkey_unpack))
+               __bch2_bkey_pack_verify(packed, unpacked, format);
+}
 
 struct pack_state {
        const struct bkey_format *format;
@@ -398,7 +398,6 @@ static bool set_inc_field_lossy(struct pack_state *state, unsigned field, u64 v)
        return ret;
 }
 
-#ifdef CONFIG_BCACHEFS_DEBUG
 static bool bkey_packed_successor(struct bkey_packed *out,
                                  const struct btree *b,
                                  struct bkey_packed k)
@@ -455,7 +454,6 @@ static bool bkey_format_has_too_big_fields(const struct bkey_format *f)
 
        return false;
 }
-#endif
 
 /*
  * Returns a packed key that compares <= in
@@ -472,9 +470,7 @@ enum bkey_pack_pos_ret bch2_bkey_pack_pos_lossy(struct bkey_packed *out,
        const struct bkey_format *f = &b->format;
        struct pack_state state = pack_state_init(f, out);
        u64 *w = out->_data;
-#ifdef CONFIG_BCACHEFS_DEBUG
        struct bpos orig = in;
-#endif
        bool exact = true;
        unsigned i;
 
@@ -527,18 +523,18 @@ enum bkey_pack_pos_ret bch2_bkey_pack_pos_lossy(struct bkey_packed *out,
        out->format     = KEY_FORMAT_LOCAL_BTREE;
        out->type       = KEY_TYPE_deleted;
 
-#ifdef CONFIG_BCACHEFS_DEBUG
-       if (exact) {
-               BUG_ON(bkey_cmp_left_packed(b, out, &orig));
-       } else {
-               struct bkey_packed successor;
+       if (static_branch_unlikely(&bch2_debug_check_bkey_unpack)) {
+               if (exact) {
+                       BUG_ON(bkey_cmp_left_packed(b, out, &orig));
+               } else {
+                       struct bkey_packed successor;
 
-               BUG_ON(bkey_cmp_left_packed(b, out, &orig) >= 0);
-               BUG_ON(bkey_packed_successor(&successor, b, *out) &&
-                      bkey_cmp_left_packed(b, &successor, &orig) < 0 &&
-                      !bkey_format_has_too_big_fields(f));
+                       BUG_ON(bkey_cmp_left_packed(b, out, &orig) >= 0);
+                       BUG_ON(bkey_packed_successor(&successor, b, *out) &&
+                              bkey_cmp_left_packed(b, &successor, &orig) < 0 &&
+                              !bkey_format_has_too_big_fields(f));
+               }
        }
-#endif
 
        return exact ? BKEY_PACK_POS_EXACT : BKEY_PACK_POS_SMALLER;
 }
@@ -627,14 +623,13 @@ struct bkey_format bch2_bkey_format_done(struct bkey_format_state *s)
                }
        }
 
-#ifdef CONFIG_BCACHEFS_DEBUG
-       {
+       if (static_branch_unlikely(&bch2_debug_check_bkey_unpack)) {
                struct printbuf buf = PRINTBUF;
 
                BUG_ON(bch2_bkey_format_invalid(NULL, &ret, 0, &buf));
                printbuf_exit(&buf);
        }
-#endif
+
        return ret;
 }