]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/btree_write_buffer_types.h
Update bcachefs sources to bca25b802d fixup! bcachefs: Fix bch2_check_discard_freespa...
[bcachefs-tools-debian] / libbcachefs / btree_write_buffer_types.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H
3 #define _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H
4
5 #include "journal_types.h"
6
7 #define BTREE_WRITE_BUFERED_VAL_U64s_MAX        4
8 #define BTREE_WRITE_BUFERED_U64s_MAX    (BKEY_U64s + BTREE_WRITE_BUFERED_VAL_U64s_MAX)
9
10 struct btree_write_buffered_key {
11         u64                     journal_seq;
12         unsigned                journal_offset;
13         enum btree_id           btree;
14         __BKEY_PADDED(k, BTREE_WRITE_BUFERED_VAL_U64s_MAX);
15 };
16
17 union btree_write_buffer_state {
18         struct {
19                 atomic64_t      counter;
20         };
21
22         struct {
23                 u64             v;
24         };
25
26         struct {
27                 u64                     nr:23;
28                 u64                     idx:1;
29                 u64                     ref0:20;
30                 u64                     ref1:20;
31         };
32 };
33
34 struct btree_write_buffer {
35         struct mutex                    flush_lock;
36         struct journal_entry_pin        journal_pin;
37
38         union btree_write_buffer_state  state;
39         size_t                          size;
40
41         struct btree_write_buffered_key *keys[2];
42 };
43
44 #endif /* _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H */