]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/btree_write_buffer_types.h
9b9433de9c3686aa59255858e44411384219bafc
[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 "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 */