diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-11-04 12:53:59 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2019-11-04 12:53:59 -0500 |
commit | 6016d33b801a5fe13e86e5be3abf68ed166c0796 (patch) | |
tree | 47a42030c705d19e6b74ea785e82f123a10015b0 /libbcachefs/bset.c | |
parent | 61bc316a4da4831d8812eb5051732cca27652d8d (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.c | 18 |
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); } |