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
10struct bucket {
11 u8 lock;
12 u8 gen_valid:1;
13 u8 data_type:7;
14 u8 gen;
15 u8 stripe_redundancy;
16 u32 stripe;
17 u32 dirty_sectors;
18 u32 cached_sectors;
19};
20
21struct bucket_array {
22 struct rcu_head rcu;
23 u16 first_bucket;
24 size_t nbuckets;
25 struct bucket b[];
26};
27
28struct bucket_gens {
29 struct rcu_head rcu;
30 u16 first_bucket;
31 size_t nbuckets;
32 u8 b[];
33};
34
35struct bch_dev_usage {
36 struct {
37 u64 buckets;
38 u64 sectors; /* _compressed_ sectors: */
39 /*
40 * XXX
41 * Why do we have this? Isn't it just buckets * bucket_size -
42 * sectors?
43 */
44 u64 fragmented;
45 } d[BCH_DATA_NR];
46};
47
48struct bch_fs_usage_base {
49 u64 hidden;
50 u64 btree;
51 u64 data;
52 u64 cached;
53 u64 reserved;
54 u64 nr_inodes;
55};
56
57struct bch_fs_usage {
58 /* all fields are in units of 512 byte sectors: */
59 struct bch_fs_usage_base b;
60 u64 persistent_reserved[BCH_REPLICAS_MAX];
61 u64 replicas[];
62};
63
64struct bch_fs_usage_online {
65 u64 online_reserved;
66 struct bch_fs_usage u;
67};
68
69struct bch_fs_usage_short {
70 u64 capacity;
71 u64 used;
72 u64 free;
73 u64 nr_inodes;
74};
75
76/*
77 * A reservation for space on disk:
78 */
79struct disk_reservation {
80 u64 sectors;
81 u32 gen;
82 unsigned nr_replicas;
83};
84
85#endif /* _BUCKETS_TYPES_H */
86

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