]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/buckets_types.h
Update bcachefs sources to a180af9dd349 bcachefs: Refactor memcpy into direct assignment
[bcachefs-tools-debian] / libbcachefs / buckets_types.h
index 18bf1713997a93eb148a44aa43ff114af20f3915..2a9dab9006efa68ca64648d866fec47010b58ad2 100644 (file)
+/* SPDX-License-Identifier: GPL-2.0 */
 #ifndef _BUCKETS_TYPES_H
 #define _BUCKETS_TYPES_H
 
+#include "bcachefs_format.h"
 #include "util.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;
-
-               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;
-       };
-       };
-};
+#define BUCKET_JOURNAL_SEQ_BITS                16
 
 struct bucket {
-       union {
-               struct {
-                       u16     read_prio;
-                       u16     write_prio;
-               };
-               u16             prio[2];
-       };
-
-       union {
-               struct bucket_mark      _mark;
-               const struct bucket_mark mark;
-       };
+       u8                      lock;
+       u8                      gen_valid:1;
+       u8                      data_type:7;
+       u8                      gen;
+       u8                      stripe_redundancy;
+       u32                     stripe;
+       u32                     dirty_sectors;
+       u32                     cached_sectors;
 };
 
-enum s_compressed {
-       S_COMPRESSED,
-       S_UNCOMPRESSED,
-       S_COMPRESSED_NR,
+struct bucket_array {
+       struct rcu_head         rcu;
+       u16                     first_bucket;
+       size_t                  nbuckets;
+       struct bucket           b[];
 };
 
-enum s_alloc {
-       S_META,
-       S_DIRTY,
-       S_CACHED,
-       S_ALLOC_NR,
+struct bucket_gens {
+       struct rcu_head         rcu;
+       u16                     first_bucket;
+       size_t                  nbuckets;
+       u8                      b[];
 };
 
 struct bch_dev_usage {
-       u64                     buckets_dirty;
-       u64                     buckets_cached;
-       u64                     buckets_meta;
-       u64                     buckets_alloc;
+       u64                     buckets_ec;
 
-       u64                     sectors[S_ALLOC_NR];
+       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];
 };
 
 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;
+       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 bucket_heap_entry {
-       size_t                  bucket;
-       struct bucket_mark      mark;
+struct bch_fs_usage_online {
+       u64                     online_reserved;
+       struct bch_fs_usage     u;
 };
 
-typedef HEAP(struct bucket_heap_entry) bucket_heap;
+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;
 };
 
 #endif /* _BUCKETS_TYPES_H */