1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_BTREE_KEY_CACHE_TYPES_H
3#define _BCACHEFS_BTREE_KEY_CACHE_TYPES_H
4
5struct btree_key_cache_freelist {
6	struct bkey_cached	*objs[16];
7	unsigned		nr;
8};
9
10struct btree_key_cache {
11	struct mutex		lock;
12	struct rhashtable	table;
13	bool			table_init_done;
14
15	struct list_head	freed_pcpu;
16	size_t			nr_freed_pcpu;
17	struct list_head	freed_nonpcpu;
18	size_t			nr_freed_nonpcpu;
19
20	struct shrinker		*shrink;
21	unsigned		shrink_iter;
22	struct btree_key_cache_freelist __percpu *pcpu_freed;
23
24	atomic_long_t		nr_freed;
25	atomic_long_t		nr_keys;
26	atomic_long_t		nr_dirty;
27};
28
29struct bkey_cached_key {
30	u32			btree_id;
31	struct bpos		pos;
32} __packed __aligned(4);
33
34#endif /* _BCACHEFS_BTREE_KEY_CACHE_TYPES_H */
35