summaryrefslogtreecommitdiff
path: root/libbcache/buckets_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'libbcache/buckets_types.h')
-rw-r--r--libbcache/buckets_types.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/libbcache/buckets_types.h b/libbcache/buckets_types.h
new file mode 100644
index 00000000..6bbdcd26
--- /dev/null
+++ b/libbcache/buckets_types.h
@@ -0,0 +1,99 @@
+#ifndef _BUCKETS_TYPES_H
+#define _BUCKETS_TYPES_H
+
+struct bucket_mark {
+ union {
+ struct {
+ u64 counter;
+ };
+
+ struct {
+ u8 gen;
+
+ /* generation copygc is going to move this bucket into */
+ unsigned copygc:1;
+ unsigned wait_on_journal:1;
+
+ /*
+ * If this bucket ever had metadata in it, the allocator must
+ * increment its gen before we reuse it:
+ */
+ unsigned had_metadata:1;
+
+ unsigned owned_by_allocator:1;
+ unsigned is_metadata:1;
+
+ u16 cached_sectors;
+ u16 dirty_sectors;
+
+ /*
+ * low bits of journal sequence number when this bucket was most
+ * recently modified:
+ */
+ 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;
+ };
+};
+
+struct bucket_stats_cache {
+ u64 buckets_dirty;
+ u64 buckets_cached;
+ u64 buckets_meta;
+ u64 buckets_alloc;
+
+ u64 sectors_dirty;
+ u64 sectors_cached;
+ u64 sectors_meta;
+};
+
+enum s_alloc {
+ S_META,
+ S_DIRTY,
+ S_CACHED,
+ S_ALLOC_NR,
+};
+
+enum s_compressed {
+ S_COMPRESSED,
+ S_UNCOMPRESSED,
+ S_COMPRESSED_NR,
+};
+
+struct bucket_stats_cache_set {
+ /* 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 */