+/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _BUCKETS_TYPES_H
#define _BUCKETS_TYPES_H
#define BUCKET_JOURNAL_SEQ_BITS 16
-struct bucket_mark {
- union {
- struct {
- atomic64_t v;
- };
-
- struct {
- u8 gen;
- u8 data_type:3,
- gen_valid:1,
- owned_by_allocator:1,
- nouse:1,
- journal_seq_valid:1,
- stripe:1;
- u16 dirty_sectors;
- u16 cached_sectors;
-
- /*
- * low bits of journal sequence number when this bucket was most
- * recently modified: if journal_seq_valid is set, this bucket
- * can't be reused until the journal sequence number written to
- * disk is >= the bucket's journal sequence number:
- */
- u16 journal_seq;
- };
- };
-};
-
struct bucket {
- union {
- struct bucket_mark _mark;
- const struct bucket_mark mark;
- };
-
- u16 io_time[2];
+ u8 lock;
+ u8 gen_valid:1;
+ u8 data_type:7;
+ u8 gen;
+ u8 stripe_redundancy;
+ u32 stripe;
+ u32 dirty_sectors;
+ u32 cached_sectors;
};
struct bucket_array {
struct bucket b[];
};
+struct bucket_gens {
+ struct rcu_head rcu;
+ u16 first_bucket;
+ size_t nbuckets;
+ u8 b[];
+};
+
struct bch_dev_usage {
- u64 buckets[BCH_DATA_NR];
- u64 buckets_alloc;
- u64 buckets_ec;
- u64 buckets_unavailable;
+ struct {
+ u64 buckets;
+ u64 sectors; /* _compressed_ sectors: */
+ /*
+ * XXX
+ * Why do we have this? Isn't it just buckets * bucket_size -
+ * sectors?
+ */
+ u64 fragmented;
+ } d[BCH_DATA_NR];
+};
- /* _compressed_ sectors: */
- u64 sectors[BCH_DATA_NR];
- u64 sectors_fragmented;
+struct bch_fs_usage_base {
+ u64 hidden;
+ u64 btree;
+ u64 data;
+ u64 cached;
+ u64 reserved;
+ u64 nr_inodes;
};
struct bch_fs_usage {
/* all fields are in units of 512 byte sectors: */
+ struct bch_fs_usage_base b;
+ u64 persistent_reserved[BCH_REPLICAS_MAX];
+ u64 replicas[];
+};
- struct {
- u64 data[BCH_DATA_NR];
- u64 ec_data;
- u64 persistent_reserved;
- } replicas[BCH_REPLICAS_MAX];
-
- u64 buckets[BCH_DATA_NR];
-
- /* fields starting here aren't touched by gc: */
+struct bch_fs_usage_online {
u64 online_reserved;
- u64 available_cache;
+ struct bch_fs_usage u;
+};
+
+struct bch_fs_usage_short {
+ u64 capacity;
+ u64 used;
+ u64 free;
+ u64 nr_inodes;
};
/*
* A reservation for space on disk:
*/
struct disk_reservation {
- u64 sectors;
- u32 gen;
- unsigned nr_replicas;
+ u64 sectors;
+ u32 gen;
+ unsigned nr_replicas;
};
-struct copygc_heap_entry {
- u8 gen;
- u32 sectors;
- u64 offset;
-};
-
-typedef HEAP(struct copygc_heap_entry) copygc_heap;
-
#endif /* _BUCKETS_TYPES_H */