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