]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/buckets_types.h
Update bcachefs sources to 313b24b652 bcachefs: Fix an assertion
[bcachefs-tools-debian] / libbcachefs / buckets_types.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BUCKETS_TYPES_H
3 #define _BUCKETS_TYPES_H
4
5 #include "bcachefs_format.h"
6 #include "util.h"
7
8 #define BUCKET_JOURNAL_SEQ_BITS         16
9
10 struct bucket_mark {
11         union {
12         atomic64_t      v;
13
14         struct {
15         u8              gen;
16         u8              data_type:3,
17                         owned_by_allocator:1,
18                         journal_seq_valid:1,
19                         stripe:1;
20         u16             dirty_sectors;
21         u16             cached_sectors;
22
23         /*
24          * low bits of journal sequence number when this bucket was most
25          * recently modified: if journal_seq_valid is set, this bucket can't be
26          * reused until the journal sequence number written to disk is >= the
27          * bucket's journal sequence number:
28          */
29         u16             journal_seq;
30         };
31         };
32 };
33
34 struct bucket {
35         union {
36                 struct bucket_mark      _mark;
37                 const struct bucket_mark mark;
38         };
39
40         u16                             io_time[2];
41         u8                              oldest_gen;
42         u8                              gc_gen;
43         unsigned                        gen_valid:1;
44         u8                              ec_redundancy;
45 };
46
47 struct bucket_array {
48         struct rcu_head         rcu;
49         u16                     first_bucket;
50         size_t                  nbuckets;
51         struct bucket           b[];
52 };
53
54 struct bch_dev_usage {
55         u64                     buckets_alloc;
56         u64                     buckets_ec;
57         u64                     buckets_unavailable;
58
59         struct {
60                 u64             buckets;
61                 u64             sectors; /* _compressed_ sectors: */
62                 u64             fragmented;
63         }                       d[BCH_DATA_NR];
64 };
65
66 struct bch_fs_usage {
67         /* all fields are in units of 512 byte sectors: */
68
69         u64                     online_reserved;
70
71         /* fields after online_reserved are cleared/recalculated by gc: */
72         u64                     gc_start[0];
73
74         u64                     hidden;
75         u64                     btree;
76         u64                     data;
77         u64                     cached;
78         u64                     reserved;
79         u64                     nr_inodes;
80
81         /* XXX: add stats for compression ratio */
82 #if 0
83         u64                     uncompressed;
84         u64                     compressed;
85 #endif
86
87         /* broken out: */
88
89         u64                     persistent_reserved[BCH_REPLICAS_MAX];
90         u64                     replicas[];
91 };
92
93 struct bch_fs_usage_short {
94         u64                     capacity;
95         u64                     used;
96         u64                     free;
97         u64                     nr_inodes;
98 };
99
100 struct replicas_delta {
101         s64                     delta;
102         struct bch_replicas_entry r;
103 } __packed;
104
105 struct replicas_delta_list {
106         unsigned                size;
107         unsigned                used;
108
109         struct                  {} memset_start;
110         u64                     nr_inodes;
111         u64                     persistent_reserved[BCH_REPLICAS_MAX];
112         struct                  {} memset_end;
113         struct replicas_delta   d[0];
114 };
115
116 /*
117  * A reservation for space on disk:
118  */
119 struct disk_reservation {
120         u64                     sectors;
121         u32                     gen;
122         unsigned                nr_replicas;
123 };
124
125 struct copygc_heap_entry {
126         u8                      dev;
127         u8                      gen;
128         u8                      replicas;
129         u16                     fragmentation;
130         u32                     sectors;
131         u64                     offset;
132 };
133
134 typedef HEAP(struct copygc_heap_entry) copygc_heap;
135
136 #endif /* _BUCKETS_TYPES_H */