mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 09:14:07 -04:00
bcachefs: Inline bch2_bkey_format_add_key()
This is only called in two places, and when it's used we use it in a tight loop - it's definitely worth inlining. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -262,14 +262,6 @@ bool bch2_bkey_transform(const struct bkey_format *out_f,
|
||||
return true;
|
||||
}
|
||||
|
||||
#define bkey_fields() \
|
||||
x(BKEY_FIELD_INODE, p.inode) \
|
||||
x(BKEY_FIELD_OFFSET, p.offset) \
|
||||
x(BKEY_FIELD_SNAPSHOT, p.snapshot) \
|
||||
x(BKEY_FIELD_SIZE, size) \
|
||||
x(BKEY_FIELD_VERSION_HI, version.hi) \
|
||||
x(BKEY_FIELD_VERSION_LO, version.lo)
|
||||
|
||||
struct bkey __bch2_bkey_unpack_key(const struct bkey_format *format,
|
||||
const struct bkey_packed *in)
|
||||
{
|
||||
@@ -553,24 +545,6 @@ void bch2_bkey_format_init(struct bkey_format_state *s)
|
||||
s->field_min[BKEY_FIELD_SIZE] = 0;
|
||||
}
|
||||
|
||||
static void __bkey_format_add(struct bkey_format_state *s,
|
||||
unsigned field, u64 v)
|
||||
{
|
||||
s->field_min[field] = min(s->field_min[field], v);
|
||||
s->field_max[field] = max(s->field_max[field], v);
|
||||
}
|
||||
|
||||
/*
|
||||
* Changes @format so that @k can be successfully packed with @format
|
||||
*/
|
||||
void bch2_bkey_format_add_key(struct bkey_format_state *s, const struct bkey *k)
|
||||
{
|
||||
#define x(id, field) __bkey_format_add(s, id, k->field);
|
||||
bkey_fields()
|
||||
#undef x
|
||||
__bkey_format_add(s, BKEY_FIELD_OFFSET, bkey_start_offset(k));
|
||||
}
|
||||
|
||||
void bch2_bkey_format_add_pos(struct bkey_format_state *s, struct bpos p)
|
||||
{
|
||||
unsigned field = 0;
|
||||
|
||||
@@ -97,17 +97,6 @@ do { \
|
||||
|
||||
struct btree;
|
||||
|
||||
struct bkey_format_state {
|
||||
u64 field_min[BKEY_NR_FIELDS];
|
||||
u64 field_max[BKEY_NR_FIELDS];
|
||||
};
|
||||
|
||||
void bch2_bkey_format_init(struct bkey_format_state *);
|
||||
void bch2_bkey_format_add_key(struct bkey_format_state *, const struct bkey *);
|
||||
void bch2_bkey_format_add_pos(struct bkey_format_state *, struct bpos);
|
||||
struct bkey_format bch2_bkey_format_done(struct bkey_format_state *);
|
||||
const char *bch2_bkey_format_validate(struct bkey_format *);
|
||||
|
||||
__pure
|
||||
unsigned bch2_bkey_greatest_differing_bit(const struct btree *,
|
||||
const struct bkey_packed *,
|
||||
@@ -671,4 +660,40 @@ void bch2_bkey_pack_test(void);
|
||||
static inline void bch2_bkey_pack_test(void) {}
|
||||
#endif
|
||||
|
||||
#define bkey_fields() \
|
||||
x(BKEY_FIELD_INODE, p.inode) \
|
||||
x(BKEY_FIELD_OFFSET, p.offset) \
|
||||
x(BKEY_FIELD_SNAPSHOT, p.snapshot) \
|
||||
x(BKEY_FIELD_SIZE, size) \
|
||||
x(BKEY_FIELD_VERSION_HI, version.hi) \
|
||||
x(BKEY_FIELD_VERSION_LO, version.lo)
|
||||
|
||||
struct bkey_format_state {
|
||||
u64 field_min[BKEY_NR_FIELDS];
|
||||
u64 field_max[BKEY_NR_FIELDS];
|
||||
};
|
||||
|
||||
void bch2_bkey_format_init(struct bkey_format_state *);
|
||||
|
||||
static inline void __bkey_format_add(struct bkey_format_state *s, unsigned field, u64 v)
|
||||
{
|
||||
s->field_min[field] = min(s->field_min[field], v);
|
||||
s->field_max[field] = max(s->field_max[field], v);
|
||||
}
|
||||
|
||||
/*
|
||||
* Changes @format so that @k can be successfully packed with @format
|
||||
*/
|
||||
static inline void bch2_bkey_format_add_key(struct bkey_format_state *s, const struct bkey *k)
|
||||
{
|
||||
#define x(id, field) __bkey_format_add(s, id, k->field);
|
||||
bkey_fields()
|
||||
#undef x
|
||||
__bkey_format_add(s, BKEY_FIELD_OFFSET, bkey_start_offset(k));
|
||||
}
|
||||
|
||||
void bch2_bkey_format_add_pos(struct bkey_format_state *, struct bpos);
|
||||
struct bkey_format bch2_bkey_format_done(struct bkey_format_state *);
|
||||
const char *bch2_bkey_format_validate(struct bkey_format *);
|
||||
|
||||
#endif /* _BCACHEFS_BKEY_H */
|
||||
|
||||
Reference in New Issue
Block a user