#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 {
- u64 counter;
+ atomic64_t v;
};
struct {
gen_valid:1,
owned_by_allocator:1,
nouse:1,
- journal_seq_valid:1,
- touched_this_mount:1;
+ journal_seq_valid:1;
u16 dirty_sectors;
u16 cached_sectors;
};
struct bucket {
- u16 prio[2];
-
union {
struct bucket_mark _mark;
const struct bucket_mark mark;
};
+
+ u16 io_time[2];
};
struct bucket_array {
/* _compressed_ sectors: */
u64 sectors[BCH_DATA_NR];
-};
-
-/* kill, switch to bch_data_type? */
-enum s_alloc {
- S_META,
- S_DIRTY,
- S_ALLOC_NR,
+ u64 sectors_fragmented;
};
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 data[BCH_DATA_NR];
u64 persistent_reserved;
- } s[BCH_REPLICAS_MAX];
+ } replicas[BCH_REPLICAS_MAX];
+
+ u64 buckets[BCH_DATA_NR];
};
/*
};
struct copygc_heap_entry {
+ u8 gen;
+ u32 sectors;
u64 offset;
- struct bucket_mark mark;
};
typedef HEAP(struct copygc_heap_entry) copygc_heap;