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 "darray.h" |
6 | #include "journal_types.h" |
7 | |
8 | #define BTREE_WRITE_BUFERED_VAL_U64s_MAX 4 |
9 | #define BTREE_WRITE_BUFERED_U64s_MAX (BKEY_U64s + BTREE_WRITE_BUFERED_VAL_U64s_MAX) |
10 | |
11 | struct wb_key_ref { |
12 | union { |
13 | struct { |
14 | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
15 | unsigned idx:24; |
16 | u8 pos[sizeof(struct bpos)]; |
17 | enum btree_id btree:8; |
18 | #else |
19 | enum btree_id btree:8; |
20 | u8 pos[sizeof(struct bpos)]; |
21 | unsigned idx:24; |
22 | #endif |
23 | } __packed; |
24 | struct { |
25 | #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ |
26 | u64 lo; |
27 | u64 mi; |
28 | u64 hi; |
29 | #else |
30 | u64 hi; |
31 | u64 mi; |
32 | u64 lo; |
33 | #endif |
34 | }; |
35 | }; |
36 | }; |
37 | |
38 | struct btree_write_buffered_key { |
39 | enum btree_id btree:8; |
40 | u64 journal_seq:56; |
41 | __BKEY_PADDED(k, BTREE_WRITE_BUFERED_VAL_U64s_MAX); |
42 | }; |
43 | |
44 | struct btree_write_buffer_keys { |
45 | DARRAY(struct btree_write_buffered_key) keys; |
46 | struct journal_entry_pin pin; |
47 | struct mutex lock; |
48 | }; |
49 | |
50 | struct btree_write_buffer { |
51 | DARRAY(struct wb_key_ref) sorted; |
52 | struct btree_write_buffer_keys inc; |
53 | struct btree_write_buffer_keys flushing; |
54 | struct work_struct flush_work; |
55 | }; |
56 | |
57 | #endif /* _BCACHEFS_BTREE_WRITE_BUFFER_TYPES_H */ |
58 | |