diff options
Diffstat (limited to 'libbcachefs/buckets_types.h')
-rw-r--r-- | libbcachefs/buckets_types.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/libbcachefs/buckets_types.h b/libbcachefs/buckets_types.h new file mode 100644 index 00000000..ca187099 --- /dev/null +++ b/libbcachefs/buckets_types.h @@ -0,0 +1,112 @@ +#ifndef _BUCKETS_TYPES_H +#define _BUCKETS_TYPES_H + +enum bucket_data_type { + BUCKET_DATA = 0, + BUCKET_BTREE, + BUCKET_PRIOS, + BUCKET_JOURNAL, + BUCKET_SB, +}; + +struct bucket_mark { + union { + struct { + u64 counter; + }; + + struct { + u8 gen; + + /* generation copygc is going to move this bucket into */ + unsigned copygc:1; + + unsigned journal_seq_valid:1; + + /* + * If this bucket had metadata while at the current generation + * number, the allocator must increment its gen before we reuse + * it: + */ + unsigned had_metadata:1; + + unsigned owned_by_allocator:1; + + unsigned data_type:3; + + unsigned nouse: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 { + u16 read_prio; + u16 write_prio; + }; + u16 prio[2]; + }; + + union { + struct bucket_mark _mark; + const struct bucket_mark mark; + }; +}; + +enum s_compressed { + S_COMPRESSED, + S_UNCOMPRESSED, + S_COMPRESSED_NR, +}; + +enum s_alloc { + S_META, + S_DIRTY, + S_CACHED, + S_ALLOC_NR, +}; + +struct bch_dev_usage { + u64 buckets_dirty; + u64 buckets_cached; + u64 buckets_meta; + u64 buckets_alloc; + + u64 sectors[S_ALLOC_NR]; +}; + +struct bch_fs_usage { + /* all fields are in units of 512 byte sectors: */ + u64 s[S_COMPRESSED_NR][S_ALLOC_NR]; + u64 persistent_reserved; + u64 online_reserved; + u64 available_cache; +}; + +struct bucket_heap_entry { + struct bucket *g; + unsigned long val; +}; + +/* + * A reservation for space on disk: + */ +struct disk_reservation { + u64 sectors; + u32 gen; + unsigned nr_replicas; +}; + +#endif /* _BUCKETS_TYPES_H */ |