Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_SB_MEMBERS_FORMAT_H
3#define _BCACHEFS_SB_MEMBERS_FORMAT_H
4
5/*
6 * We refer to members with bitmasks in various places - but we need to get rid
7 * of this limit:
8 */
9#define BCH_SB_MEMBERS_MAX 64
10
11#define BCH_MIN_NR_NBUCKETS (1 << 6)
12
13#define BCH_IOPS_MEASUREMENTS() \
14 x(seqread, 0) \
15 x(seqwrite, 1) \
16 x(randread, 2) \
17 x(randwrite, 3)
18
19enum bch_iops_measurement {
20#define x(t, n) BCH_IOPS_##t = n,
21 BCH_IOPS_MEASUREMENTS()
22#undef x
23 BCH_IOPS_NR
24};
25
26#define BCH_MEMBER_ERROR_TYPES() \
27 x(read, 0) \
28 x(write, 1) \
29 x(checksum, 2)
30
31enum bch_member_error_type {
32#define x(t, n) BCH_MEMBER_ERROR_##t = n,
33 BCH_MEMBER_ERROR_TYPES()
34#undef x
35 BCH_MEMBER_ERROR_NR
36};
37
38struct bch_member {
39 __uuid_t uuid;
40 __le64 nbuckets; /* device size */
41 __le16 first_bucket; /* index of first bucket used */
42 __le16 bucket_size; /* sectors */
43 __u8 btree_bitmap_shift;
44 __u8 pad[3];
45 __le64 last_mount; /* time_t */
46
47 __le64 flags;
48 __le32 iops[4];
49 __le64 errors[BCH_MEMBER_ERROR_NR];
50 __le64 errors_at_reset[BCH_MEMBER_ERROR_NR];
51 __le64 errors_reset_time;
52 __le64 seq;
53 __le64 btree_allocated_bitmap;
54 /*
55 * On recovery from a clean shutdown we don't normally read the journal,
56 * but we still want to resume writing from where we left off so we
57 * don't overwrite more than is necessary, for list journal debugging:
58 */
59 __le32 last_journal_bucket;
60 __le32 last_journal_bucket_offset;
61};
62
63/*
64 * This limit comes from the bucket_gens array - it's a single allocation, and
65 * kernel allocation are limited to INT_MAX
66 */
67#define BCH_MEMBER_NBUCKETS_MAX (INT_MAX - 64)
68
69#define BCH_MEMBER_V1_BYTES 56
70
71LE64_BITMASK(BCH_MEMBER_STATE, struct bch_member, flags, 0, 4)
72/* 4-14 unused, was TIER, HAS_(META)DATA, REPLACEMENT */
73LE64_BITMASK(BCH_MEMBER_DISCARD, struct bch_member, flags, 14, 15)
74LE64_BITMASK(BCH_MEMBER_DATA_ALLOWED, struct bch_member, flags, 15, 20)
75LE64_BITMASK(BCH_MEMBER_GROUP, struct bch_member, flags, 20, 28)
76LE64_BITMASK(BCH_MEMBER_DURABILITY, struct bch_member, flags, 28, 30)
77LE64_BITMASK(BCH_MEMBER_FREESPACE_INITIALIZED,
78 struct bch_member, flags, 30, 31)
79
80#if 0
81LE64_BITMASK(BCH_MEMBER_NR_READ_ERRORS, struct bch_member, flags[1], 0, 20);
82LE64_BITMASK(BCH_MEMBER_NR_WRITE_ERRORS,struct bch_member, flags[1], 20, 40);
83#endif
84
85#define BCH_MEMBER_STATES() \
86 x(rw, 0) \
87 x(ro, 1) \
88 x(failed, 2) \
89 x(spare, 3)
90
91enum bch_member_state {
92#define x(t, n) BCH_MEMBER_STATE_##t = n,
93 BCH_MEMBER_STATES()
94#undef x
95 BCH_MEMBER_STATE_NR
96};
97
98struct bch_sb_field_members_v1 {
99 struct bch_sb_field field;
100 struct bch_member _members[]; //Members are now variable size
101};
102
103struct bch_sb_field_members_v2 {
104 struct bch_sb_field field;
105 __le16 member_bytes; //size of single member entry
106 u8 pad[6];
107 struct bch_member _members[];
108};
109
110#endif /* _BCACHEFS_SB_MEMBERS_FORMAT_H */