diff options
-rw-r--r-- | drivers/md/bcache/bkey.c | 8 | ||||
-rw-r--r-- | drivers/md/bcache/bkey.h | 6 | ||||
-rw-r--r-- | drivers/md/bcache/bset.c | 4 | ||||
-rw-r--r-- | drivers/md/bcache/bset.h | 19 | ||||
-rw-r--r-- | drivers/md/bcache/btree_gc.c | 2 | ||||
-rw-r--r-- | drivers/md/bcache/btree_update.c | 2 |
6 files changed, 31 insertions, 10 deletions
diff --git a/drivers/md/bcache/bkey.c b/drivers/md/bcache/bkey.c index 966620014c8f..64d2c845ce22 100644 --- a/drivers/md/bcache/bkey.c +++ b/drivers/md/bcache/bkey.c @@ -284,7 +284,7 @@ struct bkey __bkey_unpack_key(const struct bkey_format *format, } #ifndef HAVE_BCACHE_COMPILED_UNPACK -static struct bpos __bkey_unpack_pos(const struct bkey_format *format, +struct bpos __bkey_unpack_pos(const struct bkey_format *format, const struct bkey_packed *in) { struct unpack_state state = unpack_state_init(format, in); @@ -1140,11 +1140,7 @@ int __bkey_cmp_left_packed_format_checked(const struct btree *b, const struct bkey_packed *l, const struct bpos *r) { -#ifdef HAVE_BCACHE_COMPILED_UNPACK - return bkey_cmp(bkey_unpack_key_format_checked(b, l).p, *r); -#else - return bkey_cmp(__bkey_unpack_pos(&b->format, l), *r); -#endif + return bkey_cmp(bkey_unpack_pos_format_checked(b, l), *r); } __pure __flatten diff --git a/drivers/md/bcache/bkey.h b/drivers/md/bcache/bkey.h index dbea52986a53..3e29cdde93b4 100644 --- a/drivers/md/bcache/bkey.h +++ b/drivers/md/bcache/bkey.h @@ -328,6 +328,12 @@ bool bch_bkey_transform(const struct bkey_format *, struct bkey __bkey_unpack_key(const struct bkey_format *, const struct bkey_packed *); + +#ifndef HAVE_BCACHE_COMPILED_UNPACK +struct bpos __bkey_unpack_pos(const struct bkey_format *, + const struct bkey_packed *); +#endif + bool bkey_pack_key(struct bkey_packed *, const struct bkey *, const struct bkey_format *); diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c index e95213efe019..cf512da3bcb7 100644 --- a/drivers/md/bcache/bset.c +++ b/drivers/md/bcache/bset.c @@ -979,7 +979,7 @@ retry: while (bkey_next(k) != btree_bkey_last(b, t)) k = bkey_next(k); - t->max_key = bkey_unpack_key(b, k).p; + t->max_key = bkey_unpack_pos(b, k); /* Then we build the tree */ for (j = inorder_next(0, t->size); @@ -1146,7 +1146,7 @@ void bch_bset_fix_invalidated_key(struct btree *b, struct bset_tree *t, min_key.u64s = max_key.u64s = 0; if (bkey_next(k) == btree_bkey_last(b, t)) { - t->max_key = bkey_unpack_key(b, k).p; + t->max_key = bkey_unpack_pos(b, k); for (j = 1; j < t->size; j = j * 2 + 1) make_bfloat(b, t, j, &min_key, &max_key); diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h index b437f5ebdca6..f03e6b868257 100644 --- a/drivers/md/bcache/bset.h +++ b/drivers/md/bcache/bset.h @@ -210,6 +210,25 @@ static inline struct bkey bkey_unpack_key(const struct btree *b, : *packed_to_bkey_c(src); } +static inline struct bpos +bkey_unpack_pos_format_checked(const struct btree *b, + const struct bkey_packed *src) +{ +#ifdef HAVE_BCACHE_COMPILED_UNPACK + return bkey_unpack_key_format_checked(b, src).p; +#else + return __bkey_unpack_pos(&b->format, src); +#endif +} + +static inline struct bpos bkey_unpack_pos(const struct btree *b, + const struct bkey_packed *src) +{ + return likely(bkey_packed(src)) + ? bkey_unpack_pos_format_checked(b, src) + : packed_to_bkey_c(src)->p; +} + /* Disassembled bkeys */ static inline struct bkey_s_c bkey_disassemble(struct btree *b, diff --git a/drivers/md/bcache/btree_gc.c b/drivers/md/bcache/btree_gc.c index f0704e21d69b..e34445da10f5 100644 --- a/drivers/md/bcache/btree_gc.c +++ b/drivers/md/bcache/btree_gc.c @@ -567,7 +567,7 @@ static void bch_coalesce_nodes(struct btree *old_nodes[GC_MERGE_NODES], } else if (u64s) { /* move part of n2 into n1 */ n1->key.k.p = n1->data->max_key = - bkey_unpack_key(n1, last).p; + bkey_unpack_pos(n1, last); n2->data->min_key = btree_type_successor(iter->btree_id, diff --git a/drivers/md/bcache/btree_update.c b/drivers/md/bcache/btree_update.c index be27bd365f27..54b34fe9e19a 100644 --- a/drivers/md/bcache/btree_update.c +++ b/drivers/md/bcache/btree_update.c @@ -1294,7 +1294,7 @@ static struct btree *__btree_split_node(struct btree_iter *iter, struct btree *n BUG_ON(!prev); - n1->key.k.p = bkey_unpack_key(n1, prev).p; + n1->key.k.p = bkey_unpack_pos(n1, prev); n1->data->max_key = n1->key.k.p; n2->data->min_key = btree_type_successor(n1->btree_id, n1->key.k.p); |