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-10-06 01:41:44 +03:00
|
|
|
/* kill, switch to bch_data_type */
|
2017-03-01 13:45:15 +03:00
|
|
|
enum bucket_data_type {
|
|
|
|
BUCKET_DATA = 0,
|
|
|
|
BUCKET_BTREE,
|
|
|
|
BUCKET_JOURNAL,
|
|
|
|
BUCKET_SB,
|
|
|
|
};
|
|
|
|
|
2017-01-08 12:13:18 +03:00
|
|
|
struct bucket_mark {
|
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
u64 counter;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct {
|
|
|
|
u8 gen;
|
2017-05-08 13:28:15 +03:00
|
|
|
u8 data_type:3,
|
|
|
|
gen_valid:1,
|
|
|
|
owned_by_allocator:1,
|
|
|
|
nouse:1,
|
|
|
|
journal_seq_valid:1,
|
|
|
|
touched_this_mount: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 {
|
2017-05-05 12:49:48 +03:00
|
|
|
u16 prio[2];
|
2017-01-08 12:13:18 +03:00
|
|
|
|
|
|
|
union {
|
|
|
|
struct bucket_mark _mark;
|
|
|
|
const struct bucket_mark mark;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2017-06-14 04:06:05 +03:00
|
|
|
/* kill, switch to bucket_data_type */
|
2017-01-08 12:13:18 +03:00
|
|
|
enum s_alloc {
|
|
|
|
S_META,
|
|
|
|
S_DIRTY,
|
|
|
|
S_ALLOC_NR,
|
|
|
|
};
|
|
|
|
|
2017-03-12 17:53:43 +03:00
|
|
|
struct bch_dev_usage {
|
2017-06-14 04:06:05 +03:00
|
|
|
u64 buckets[S_ALLOC_NR];
|
2017-03-12 17:53:43 +03:00
|
|
|
u64 buckets_cached;
|
|
|
|
u64 buckets_alloc;
|
2017-12-14 00:01:18 +03:00
|
|
|
u64 buckets_unavailable;
|
2017-03-12 17:53:43 +03:00
|
|
|
|
2017-06-14 04:06:05 +03:00
|
|
|
/* _compressed_ sectors: */
|
2017-03-12 17:53:43 +03:00
|
|
|
u64 sectors[S_ALLOC_NR];
|
2017-06-14 04:06:05 +03:00
|
|
|
u64 sectors_cached;
|
2017-01-08 12:13:18 +03:00
|
|
|
};
|
|
|
|
|
2017-03-09 20:27:30 +03:00
|
|
|
struct bch_fs_usage {
|
2017-01-08 12:13:18 +03:00
|
|
|
/* all fields are in units of 512 byte sectors: */
|
2017-06-14 04:06:05 +03:00
|
|
|
|
|
|
|
/* _uncompressed_ sectors: */
|
|
|
|
|
|
|
|
struct {
|
|
|
|
u64 data[S_ALLOC_NR];
|
|
|
|
u64 persistent_reserved;
|
|
|
|
} s[BCH_REPLICAS_MAX];
|
|
|
|
|
2017-01-08 12:13:18 +03:00
|
|
|
u64 online_reserved;
|
|
|
|
u64 available_cache;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* A reservation for space on disk:
|
|
|
|
*/
|
|
|
|
struct disk_reservation {
|
|
|
|
u64 sectors;
|
|
|
|
u32 gen;
|
|
|
|
unsigned nr_replicas;
|
|
|
|
};
|
|
|
|
|
2017-12-14 00:01:18 +03:00
|
|
|
struct copygc_heap_entry {
|
|
|
|
u64 offset;
|
|
|
|
struct bucket_mark mark;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef HEAP(struct copygc_heap_entry) copygc_heap;
|
|
|
|
|
2017-01-08 12:13:18 +03:00
|
|
|
#endif /* _BUCKETS_TYPES_H */
|