mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
bcachefs: debug_check_bkey_unpack
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
34aeb820f9
commit
5b1247ca5f
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user