X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libbcachefs%2Fbuckets_types.h;h=f3ff4a18b1fddaddae46f16a71fe27e0532ffc13;hb=2aed686c235a7d08adf601f147f823eb62e697a1;hp=10f00861385e98ae1bb3184a251843c44b01c0e9;hpb=ff86d4722124c300c40b85b6eb8ef2d410ab303c;p=bcachefs-tools-debian diff --git a/libbcachefs/buckets_types.h b/libbcachefs/buckets_types.h index 10f0086..f3ff4a1 100644 --- a/libbcachefs/buckets_types.h +++ b/libbcachefs/buckets_types.h @@ -1,31 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _BUCKETS_TYPES_H #define _BUCKETS_TYPES_H +#include "bcachefs_format.h" #include "util.h" +#define BUCKET_JOURNAL_SEQ_BITS 16 + struct bucket_mark { union { - struct { - atomic64_t v; - }; + atomic64_t v; struct { - u8 gen; - u8 data_type:3, - gen_valid:1, - owned_by_allocator:1, - nouse:1, - journal_seq_valid: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; + u8 gen; + u8 data_type:3, + owned_by_allocator: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; }; }; }; @@ -37,6 +38,8 @@ struct bucket { }; u16 io_time[2]; + u8 oldest_gen; + unsigned gen_valid:1; }; struct bucket_array { @@ -49,6 +52,7 @@ struct bucket_array { struct bch_dev_usage { u64 buckets[BCH_DATA_NR]; u64 buckets_alloc; + u64 buckets_ec; u64 buckets_unavailable; /* _compressed_ sectors: */ @@ -56,32 +60,63 @@ struct bch_dev_usage { u64 sectors_fragmented; }; -/* kill, switch to bch_data_type? */ -enum s_alloc { - S_META, - S_DIRTY, - S_ALLOC_NR, -}; - struct bch_fs_usage { /* all fields are in units of 512 byte sectors: */ - /* _uncompressed_ sectors: */ + u64 online_reserved; - u64 available_cache; - struct { - u64 data[S_ALLOC_NR]; - u64 persistent_reserved; - } s[BCH_REPLICAS_MAX]; + /* fields after online_reserved are cleared/recalculated by gc: */ + u64 gc_start[0]; + + u64 hidden; + u64 btree; + u64 data; + u64 cached; + u64 reserved; + u64 nr_inodes; + + /* XXX: add stats for compression ratio */ +#if 0 + u64 uncompressed; + u64 compressed; +#endif + + /* broken out: */ + + u64 persistent_reserved[BCH_REPLICAS_MAX]; + u64 replicas[]; +}; + +struct bch_fs_usage_short { + u64 capacity; + u64 used; + u64 free; + u64 nr_inodes; +}; + +struct replicas_delta { + s64 delta; + struct bch_replicas_entry r; +} __packed; + +struct replicas_delta_list { + unsigned size; + unsigned used; + + struct {} memset_start; + u64 nr_inodes; + u64 persistent_reserved[BCH_REPLICAS_MAX]; + struct {} memset_end; + struct replicas_delta d[0]; }; /* * 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 {