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
11struct wb_key_ref {
12union {
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
38struct 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
44struct btree_write_buffer_keys {
45 DARRAY(struct btree_write_buffered_key) keys;
46 struct journal_entry_pin pin;
47 struct mutex lock;
48};
49
50struct 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

source code of linux/fs/bcachefs/btree_write_buffer_types.h