Commit c4e065c2 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: More bset.c microoptimization

Improve a few paper cuts that've shown up during profiling.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 928c839c
...@@ -329,7 +329,7 @@ bool bch2_bkey_pack_key(struct bkey_packed *out, const struct bkey *in, ...@@ -329,7 +329,7 @@ bool bch2_bkey_pack_key(struct bkey_packed *out, const struct bkey *in,
void bch2_bkey_unpack(const struct btree *b, struct bkey_i *dst, void bch2_bkey_unpack(const struct btree *b, struct bkey_i *dst,
const struct bkey_packed *src) const struct bkey_packed *src)
{ {
dst->k = bkey_unpack_key(b, src); __bkey_unpack_key(b, &dst->k, src);
memcpy_u64s(&dst->v, memcpy_u64s(&dst->v,
bkeyp_val(&b->format, src), bkeyp_val(&b->format, src),
......
...@@ -1548,11 +1548,13 @@ static void btree_node_iter_init_pack_failed(struct btree_node_iter *iter, ...@@ -1548,11 +1548,13 @@ static void btree_node_iter_init_pack_failed(struct btree_node_iter *iter,
* So we've got to search for start_of_range, then after the lookup iterate * So we've got to search for start_of_range, then after the lookup iterate
* past any extents that compare equal to the position we searched for. * past any extents that compare equal to the position we searched for.
*/ */
__flatten
void bch2_btree_node_iter_init(struct btree_node_iter *iter, void bch2_btree_node_iter_init(struct btree_node_iter *iter,
struct btree *b, struct bpos *search) struct btree *b, struct bpos *search)
{ {
struct bset_tree *t; struct bset_tree *t;
struct bkey_packed p, *packed_search = NULL; struct bkey_packed p, *packed_search = NULL;
struct btree_node_iter_set *pos = iter->data;
EBUG_ON(bkey_cmp(*search, b->data->min_key) < 0); EBUG_ON(bkey_cmp(*search, b->data->min_key) < 0);
bset_aux_tree_verify(b); bset_aux_tree_verify(b);
...@@ -1571,11 +1573,17 @@ void bch2_btree_node_iter_init(struct btree_node_iter *iter, ...@@ -1571,11 +1573,17 @@ void bch2_btree_node_iter_init(struct btree_node_iter *iter,
return; return;
} }
for_each_bset(b, t) for_each_bset(b, t) {
__bch2_btree_node_iter_push(iter, b, struct bkey_packed *k = bch2_bset_search(b, t, search,
bch2_bset_search(b, t, search, packed_search, &p);
packed_search, &p), struct bkey_packed *end = btree_bkey_last(b, t);
btree_bkey_last(b, t));
if (k != end)
*pos++ = (struct btree_node_iter_set) {
__btree_node_key_to_offset(b, k),
__btree_node_key_to_offset(b, end)
};
}
bch2_btree_node_iter_sort(iter, b); bch2_btree_node_iter_sort(iter, b);
} }
......
...@@ -939,7 +939,7 @@ static void btree_iter_prefetch(struct btree_iter *iter) ...@@ -939,7 +939,7 @@ static void btree_iter_prefetch(struct btree_iter *iter)
btree_node_unlock(iter, iter->level); btree_node_unlock(iter, iter->level);
} }
static inline int btree_iter_down(struct btree_iter *iter) static __always_inline int btree_iter_down(struct btree_iter *iter)
{ {
struct bch_fs *c = iter->trans->c; struct bch_fs *c = iter->trans->c;
struct btree_iter_level *l = &iter->l[iter->level]; struct btree_iter_level *l = &iter->l[iter->level];
...@@ -948,7 +948,7 @@ static inline int btree_iter_down(struct btree_iter *iter) ...@@ -948,7 +948,7 @@ static inline int btree_iter_down(struct btree_iter *iter)
enum six_lock_type lock_type = __btree_lock_want(iter, level); enum six_lock_type lock_type = __btree_lock_want(iter, level);
BKEY_PADDED(k) tmp; BKEY_PADDED(k) tmp;
BUG_ON(!btree_node_locked(iter, iter->level)); EBUG_ON(!btree_node_locked(iter, iter->level));
bch2_bkey_unpack(l->b, &tmp.k, bch2_bkey_unpack(l->b, &tmp.k,
bch2_btree_node_iter_peek(&l->iter, l->b)); bch2_btree_node_iter_peek(&l->iter, l->b));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment