Linux 6.13-rc4
[linux.git] / fs / bcachefs / alloc_background_format.h
blobbefdaa95c515b8315fd7d6d149ce51dcff844215
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H
3 #define _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H
5 struct bch_alloc {
6 struct bch_val v;
7 __u8 fields;
8 __u8 gen;
9 __u8 data[];
10 } __packed __aligned(8);
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)
22 enum {
23 #define x(name, _bits) BCH_ALLOC_FIELD_V1_##name,
24 BCH_ALLOC_FIELDS_V1()
25 #undef x
28 struct 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);
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)
45 struct 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);
56 LE32_BITMASK(BCH_ALLOC_V3_NEED_DISCARD,struct bch_alloc_v3, flags, 0, 1)
57 LE32_BITMASK(BCH_ALLOC_V3_NEED_INC_GEN,struct bch_alloc_v3, flags, 1, 2)
59 struct 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 /* end of fields in original version of alloc_v4 */
73 __u64 _fragmentation_lru; /* obsolete */
74 __u32 stripe_sectors;
75 __u32 pad;
76 } __packed __aligned(8);
78 #define BCH_ALLOC_V4_U64s_V0 6
79 #define BCH_ALLOC_V4_U64s (sizeof(struct bch_alloc_v4) / sizeof(__u64))
81 BITMASK(BCH_ALLOC_V4_NEED_DISCARD, struct bch_alloc_v4, flags, 0, 1)
82 BITMASK(BCH_ALLOC_V4_NEED_INC_GEN, struct bch_alloc_v4, flags, 1, 2)
83 BITMASK(BCH_ALLOC_V4_BACKPOINTERS_START,struct bch_alloc_v4, flags, 2, 8)
84 BITMASK(BCH_ALLOC_V4_NR_BACKPOINTERS, struct bch_alloc_v4, flags, 8, 14)
86 #define KEY_TYPE_BUCKET_GENS_BITS 8
87 #define KEY_TYPE_BUCKET_GENS_NR (1U << KEY_TYPE_BUCKET_GENS_BITS)
88 #define KEY_TYPE_BUCKET_GENS_MASK (KEY_TYPE_BUCKET_GENS_NR - 1)
90 struct bch_bucket_gens {
91 struct bch_val v;
92 u8 gens[KEY_TYPE_BUCKET_GENS_NR];
93 } __packed __aligned(8);
95 #endif /* _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H */