bcache: Clean up keylist code
More random refactoring. Signed-off-by: Kent Overstreet <kmo@daterainc.com>
This commit is contained in:
@@ -227,20 +227,23 @@ static inline struct bkey *bkey_next(const struct bkey *k)
|
||||
/* Keylists */
|
||||
|
||||
struct keylist {
|
||||
struct bkey *top;
|
||||
union {
|
||||
uint64_t *list;
|
||||
struct bkey *bottom;
|
||||
struct bkey *keys;
|
||||
uint64_t *keys_p;
|
||||
};
|
||||
union {
|
||||
struct bkey *top;
|
||||
uint64_t *top_p;
|
||||
};
|
||||
|
||||
/* Enough room for btree_split's keys without realloc */
|
||||
#define KEYLIST_INLINE 16
|
||||
uint64_t d[KEYLIST_INLINE];
|
||||
uint64_t inline_keys[KEYLIST_INLINE];
|
||||
};
|
||||
|
||||
static inline void bch_keylist_init(struct keylist *l)
|
||||
{
|
||||
l->top = (void *) (l->list = l->d);
|
||||
l->top_p = l->keys_p = l->inline_keys;
|
||||
}
|
||||
|
||||
static inline void bch_keylist_push(struct keylist *l)
|
||||
@@ -256,16 +259,30 @@ static inline void bch_keylist_add(struct keylist *l, struct bkey *k)
|
||||
|
||||
static inline bool bch_keylist_empty(struct keylist *l)
|
||||
{
|
||||
return l->top == (void *) l->list;
|
||||
return l->top == l->keys;
|
||||
}
|
||||
|
||||
static inline void bch_keylist_reset(struct keylist *l)
|
||||
{
|
||||
l->top = l->keys;
|
||||
}
|
||||
|
||||
static inline void bch_keylist_free(struct keylist *l)
|
||||
{
|
||||
if (l->list != l->d)
|
||||
kfree(l->list);
|
||||
if (l->keys_p != l->inline_keys)
|
||||
kfree(l->keys_p);
|
||||
}
|
||||
|
||||
static inline size_t bch_keylist_nkeys(struct keylist *l)
|
||||
{
|
||||
return l->top_p - l->keys_p;
|
||||
}
|
||||
|
||||
static inline size_t bch_keylist_bytes(struct keylist *l)
|
||||
{
|
||||
return bch_keylist_nkeys(l) * sizeof(uint64_t);
|
||||
}
|
||||
|
||||
void bch_keylist_copy(struct keylist *, struct keylist *);
|
||||
struct bkey *bch_keylist_pop(struct keylist *);
|
||||
void bch_keylist_pop_front(struct keylist *);
|
||||
int bch_keylist_realloc(struct keylist *, int, struct cache_set *);
|
||||
|
Reference in New Issue
Block a user