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