1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H
3#define _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H
4
5struct bch_alloc {
6 struct bch_val v;
7 __u8 fields;
8 __u8 gen;
9 __u8 data[];
10} __packed __aligned(8);
11
12#define BCH_ALLOC_FIELDS_V1() \
13 x(read_time, 16) \
14 x(write_time, 16) \
15 x(data_type, 8) \
16 x(dirty_sectors, 16) \
17 x(cached_sectors, 16) \
18 x(oldest_gen, 8) \
19 x(stripe, 32) \
20 x(stripe_redundancy, 8)
21
22enum {
23#define x(name, _bits) BCH_ALLOC_FIELD_V1_##name,
24 BCH_ALLOC_FIELDS_V1()
25#undef x
26};
27
28struct bch_alloc_v2 {
29 struct bch_val v;
30 __u8 nr_fields;
31 __u8 gen;
32 __u8 oldest_gen;
33 __u8 data_type;
34 __u8 data[];
35} __packed __aligned(8);
36
37#define BCH_ALLOC_FIELDS_V2() \
38 x(read_time, 64) \
39 x(write_time, 64) \
40 x(dirty_sectors, 32) \
41 x(cached_sectors, 32) \
42 x(stripe, 32) \
43 x(stripe_redundancy, 8)
44
45struct bch_alloc_v3 {
46 struct bch_val v;
47 __le64 journal_seq;
48 __le32 flags;
49 __u8 nr_fields;
50 __u8 gen;
51 __u8 oldest_gen;
52 __u8 data_type;
53 __u8 data[];
54} __packed __aligned(8);
55
56LE32_BITMASK(BCH_ALLOC_V3_NEED_DISCARD,struct bch_alloc_v3, flags, 0, 1)
57LE32_BITMASK(BCH_ALLOC_V3_NEED_INC_GEN,struct bch_alloc_v3, flags, 1, 2)
58
59struct bch_alloc_v4 {
60 struct bch_val v;
61 __u64 journal_seq;
62 __u32 flags;
63 __u8 gen;
64 __u8 oldest_gen;
65 __u8 data_type;
66 __u8 stripe_redundancy;
67 __u32 dirty_sectors;
68 __u32 cached_sectors;
69 __u64 io_time[2];
70 __u32 stripe;
71 __u32 nr_external_backpointers;
72 __u64 fragmentation_lru;
73} __packed __aligned(8);
74
75#define BCH_ALLOC_V4_U64s_V0 6
76#define BCH_ALLOC_V4_U64s (sizeof(struct bch_alloc_v4) / sizeof(__u64))
77
78BITMASK(BCH_ALLOC_V4_NEED_DISCARD, struct bch_alloc_v4, flags, 0, 1)
79BITMASK(BCH_ALLOC_V4_NEED_INC_GEN, struct bch_alloc_v4, flags, 1, 2)
80BITMASK(BCH_ALLOC_V4_BACKPOINTERS_START,struct bch_alloc_v4, flags, 2, 8)
81BITMASK(BCH_ALLOC_V4_NR_BACKPOINTERS, struct bch_alloc_v4, flags, 8, 14)
82
83#define KEY_TYPE_BUCKET_GENS_BITS 8
84#define KEY_TYPE_BUCKET_GENS_NR (1U << KEY_TYPE_BUCKET_GENS_BITS)
85#define KEY_TYPE_BUCKET_GENS_MASK (KEY_TYPE_BUCKET_GENS_NR - 1)
86
87struct bch_bucket_gens {
88 struct bch_val v;
89 u8 gens[KEY_TYPE_BUCKET_GENS_NR];
90} __packed __aligned(8);
91
92#endif /* _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H */
93

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