55 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _BCACHEFS_BKEY_SORT_H3#define _BCACHEFS_BKEY_SORT_H4 5struct sort_iter {6 struct btree *b;7 unsigned used;8 unsigned size;9 10 struct sort_iter_set {11 struct bkey_packed *k, *end;12 } data[];13};14 15static inline void sort_iter_init(struct sort_iter *iter, struct btree *b, unsigned size)16{17 iter->b = b;18 iter->used = 0;19 iter->size = size;20}21 22struct sort_iter_stack {23 struct sort_iter iter;24 struct sort_iter_set sets[MAX_BSETS + 1];25};26 27static inline void sort_iter_stack_init(struct sort_iter_stack *iter, struct btree *b)28{29 sort_iter_init(&iter->iter, b, ARRAY_SIZE(iter->sets));30}31 32static inline void sort_iter_add(struct sort_iter *iter,33 struct bkey_packed *k,34 struct bkey_packed *end)35{36 BUG_ON(iter->used >= iter->size);37 38 if (k != end)39 iter->data[iter->used++] = (struct sort_iter_set) { k, end };40}41 42struct btree_nr_keys43bch2_key_sort_fix_overlapping(struct bch_fs *, struct bset *,44 struct sort_iter *);45 46struct btree_nr_keys47bch2_sort_repack(struct bset *, struct btree *,48 struct btree_node_iter *,49 struct bkey_format *, bool);50 51unsigned bch2_sort_keys_keep_unwritten_whiteouts(struct bkey_packed *, struct sort_iter *);52unsigned bch2_sort_keys(struct bkey_packed *, struct sort_iter *);53 54#endif /* _BCACHEFS_BKEY_SORT_H */55