brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 9be969d Raw
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