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 { 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 21 struct bucket_array { 22 struct rcu_head rcu; 23 u16 first_bucket; 24 size_t nbuckets; 25 struct bucket b[]; 26 }; 27 28 struct bucket_gens { 29 struct rcu_head rcu; 30 u16 first_bucket; 31 size_t nbuckets; 32 u8 b[]; 33 }; 34 35 struct 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 48 struct 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 57 struct 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 64 struct bch_fs_usage_online { 65 u64 online_reserved; 66 struct bch_fs_usage u; 67 }; 68 69 struct 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 */ 79 struct disk_reservation { 80 u64 sectors; 81 u32 gen; 82 unsigned nr_replicas; 83 }; 84 85 #endif /* _BUCKETS_TYPES_H */ 86