bcachefs: btree key cache locking improvements
[linux-block.git] / fs / bcachefs / btree_key_cache.h
CommitLineData
2ca88e5a
KO
1#ifndef _BCACHEFS_BTREE_KEY_CACHE_H
2#define _BCACHEFS_BTREE_KEY_CACHE_H
3
8a92e545
KO
4static inline size_t bch2_nr_btree_keys_need_flush(struct bch_fs *c)
5{
331194a2
KO
6 size_t nr_dirty = atomic_long_read(&c->btree_key_cache.nr_dirty);
7 size_t nr_keys = atomic_long_read(&c->btree_key_cache.nr_keys);
f51e84fe 8 size_t max_dirty = 1024 + nr_keys / 2;
8a92e545
KO
9
10 return max_t(ssize_t, 0, nr_dirty - max_dirty);
11}
12
d5425a3b
KO
13static inline bool bch2_btree_key_cache_must_wait(struct bch_fs *c)
14{
331194a2
KO
15 size_t nr_dirty = atomic_long_read(&c->btree_key_cache.nr_dirty);
16 size_t nr_keys = atomic_long_read(&c->btree_key_cache.nr_keys);
d5425a3b
KO
17 size_t max_dirty = 4096 + (nr_keys * 3) / 4;
18
e323edd6
KO
19 return nr_dirty > max_dirty &&
20 test_bit(JOURNAL_RECLAIM_STARTED, &c->journal.flags);
d5425a3b
KO
21}
22
8cad3e2f
KO
23struct bkey_cached *
24bch2_btree_key_cache_find(struct bch_fs *, enum btree_id, struct bpos);
25
2ca88e5a
KO
26int bch2_btree_iter_traverse_cached(struct btree_iter *);
27
28bool bch2_btree_insert_key_cached(struct btree_trans *,
29 struct btree_iter *, struct bkey_i *);
30int bch2_btree_key_cache_flush(struct btree_trans *,
31 enum btree_id, struct bpos);
32#ifdef CONFIG_BCACHEFS_DEBUG
33void bch2_btree_key_cache_verify_clean(struct btree_trans *,
34 enum btree_id, struct bpos);
35#else
36static inline void
37bch2_btree_key_cache_verify_clean(struct btree_trans *trans,
38 enum btree_id id, struct bpos pos) {}
39#endif
40
41void bch2_fs_btree_key_cache_exit(struct btree_key_cache *);
42void bch2_fs_btree_key_cache_init_early(struct btree_key_cache *);
43int bch2_fs_btree_key_cache_init(struct btree_key_cache *);
44
d211b408
KO
45void bch2_btree_key_cache_to_text(struct printbuf *, struct btree_key_cache *);
46
14ba3706
KO
47void bch2_btree_key_cache_exit(void);
48int __init bch2_btree_key_cache_init(void);
49
2ca88e5a 50#endif /* _BCACHEFS_BTREE_KEY_CACHE_H */