1 #ifndef _BCACHE_BKEY_METHODS_H
2 #define _BCACHE_BKEY_METHODS_H
6 #define DEF_BTREE_ID(kwd, val, name) BKEY_TYPE_##kwd = val,
13 /* Type of a key in btree @id at level @level: */
14 static inline enum bkey_type bkey_type(unsigned level, enum btree_id id)
16 return level ? BKEY_TYPE_BTREE : id;
19 static inline bool btree_type_has_ptrs(enum bkey_type type)
23 case BKEY_TYPE_EXTENTS:
38 * The keys were mergeable, but would have overflowed size - so instead
39 * l was changed to the maximum size, and both keys were modified:
45 typedef bool (*key_filter_fn)(struct cache_set *, struct btree *,
47 typedef enum merge_result (*key_merge_fn)(struct cache_set *,
49 struct bkey_i *, struct bkey_i *);
52 /* Returns reason for being invalid if invalid, else NULL: */
53 const char * (*key_invalid)(const struct cache_set *,
55 void (*key_debugcheck)(struct cache_set *, struct btree *,
57 void (*val_to_text)(struct cache_set *, char *,
58 size_t, struct bkey_s_c);
59 void (*swab)(const struct bkey_format *, struct bkey_packed *);
60 key_filter_fn key_normalize;
61 key_merge_fn key_merge;
65 const char *bkey_invalid(struct cache_set *, enum bkey_type, struct bkey_s_c);
66 const char *btree_bkey_invalid(struct cache_set *, struct btree *,
69 void bkey_debugcheck(struct cache_set *, struct btree *, struct bkey_s_c);
70 void bch_bkey_val_to_text(struct cache_set *, enum bkey_type,
71 char *, size_t, struct bkey_s_c);
73 void bch_bkey_swab(enum bkey_type, const struct bkey_format *,
74 struct bkey_packed *);
76 extern const struct bkey_ops *bch_bkey_ops[];
80 #endif /* _BCACHE_BKEY_METHODS_H */