summaryrefslogtreecommitdiff
path: root/libbcachefs/bset.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-11-04 12:53:59 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2019-11-04 12:53:59 -0500
commit6016d33b801a5fe13e86e5be3abf68ed166c0796 (patch)
tree47a42030c705d19e6b74ea785e82f123a10015b0 /libbcachefs/bset.c
parent61bc316a4da4831d8812eb5051732cca27652d8d (diff)
Update bcachefs sources to 9e76e8d98c bcachefs: Fix uninitialized field in hash_check_init()
Diffstat (limited to 'libbcachefs/bset.c')
-rw-r--r--libbcachefs/bset.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/libbcachefs/bset.c b/libbcachefs/bset.c
index 32436ed5..19f13b7e 100644
--- a/libbcachefs/bset.c
+++ b/libbcachefs/bset.c
@@ -1565,11 +1565,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
* past any extents that compare equal to the position we searched for.
*/
+__flatten
void bch2_btree_node_iter_init(struct btree_node_iter *iter,
struct btree *b, struct bpos *search)
{
struct bset_tree *t;
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);
bset_aux_tree_verify(b);
@@ -1588,11 +1590,17 @@ void bch2_btree_node_iter_init(struct btree_node_iter *iter,
return;
}
- for_each_bset(b, t)
- __bch2_btree_node_iter_push(iter, b,
- bch2_bset_search(b, t, search,
- packed_search, &p),
- btree_bkey_last(b, t));
+ for_each_bset(b, t) {
+ struct bkey_packed *k = bch2_bset_search(b, t, search,
+ packed_search, &p);
+ struct bkey_packed *end = 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);
}