bcachefs-tools/libbcachefs/buckets_types.h

114 lines
1.8 KiB
C
Raw Normal View History

2017-01-08 12:13:18 +03:00
#ifndef _BUCKETS_TYPES_H
#define _BUCKETS_TYPES_H
2017-04-24 08:56:57 +03:00
#include "util.h"
2017-03-01 13:45:15 +03:00
enum bucket_data_type {
BUCKET_DATA = 0,
BUCKET_BTREE,
BUCKET_PRIOS,
BUCKET_JOURNAL,
BUCKET_SB,
};
2017-01-08 12:13:18 +03:00
struct bucket_mark {
union {
struct {
u64 counter;
};
struct {
u8 gen;
2017-03-01 13:45:15 +03:00
unsigned journal_seq_valid:1;
2017-01-08 12:13:18 +03:00
/*
2017-03-01 13:45:15 +03:00
* If this bucket had metadata while at the current generation
* number, the allocator must increment its gen before we reuse
* it:
2017-01-08 12:13:18 +03:00
*/
unsigned had_metadata:1;
unsigned owned_by_allocator:1;
2017-03-01 13:45:15 +03:00
unsigned data_type:3;
unsigned nouse:1;
2017-01-08 12:13:18 +03:00
u16 dirty_sectors;
2017-03-01 13:45:15 +03:00
u16 cached_sectors;
2017-01-08 12:13:18 +03:00
/*
* low bits of journal sequence number when this bucket was most
2017-03-01 13:45:15 +03:00
* 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:
2017-01-08 12:13:18 +03:00
*/
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,
2017-01-08 12:13:18 +03:00
};
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];
2017-01-08 12:13:18 +03:00
};
struct bch_fs_usage {
2017-01-08 12:13:18 +03:00
/* 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 {
2017-04-24 08:56:57 +03:00
size_t bucket;
struct bucket_mark mark;
2017-01-08 12:13:18 +03:00
};
2017-04-24 08:56:57 +03:00
typedef HEAP(struct bucket_heap_entry) bucket_heap;
2017-01-08 12:13:18 +03:00
/*
* A reservation for space on disk:
*/
struct disk_reservation {
u64 sectors;
u32 gen;
unsigned nr_replicas;
};
#endif /* _BUCKETS_TYPES_H */