2017-01-08 12:13:18 +03:00
|
|
|
#ifndef _BUCKETS_TYPES_H
|
|
|
|
#define _BUCKETS_TYPES_H
|
|
|
|
|
2018-08-16 02:41:24 +03:00
|
|
|
#include "bcachefs_format.h"
|
2017-04-24 08:56:57 +03:00
|
|
|
#include "util.h"
|
|
|
|
|
2018-08-16 02:41:24 +03:00
|
|
|
#define BUCKET_JOURNAL_SEQ_BITS 16
|
|
|
|
|
2017-01-08 12:13:18 +03:00
|
|
|
struct bucket_mark {
|
|
|
|
union {
|
2018-12-12 14:21:55 +03:00
|
|
|
atomic64_t v;
|
2017-01-08 12:13:18 +03:00
|
|
|
|
|
|
|
struct {
|
2018-12-12 14:21:55 +03:00
|
|
|
u8 gen;
|
|
|
|
u8 data_type:3,
|
|
|
|
owned_by_allocator:1,
|
|
|
|
dirty:1,
|
|
|
|
journal_seq_valid:1,
|
|
|
|
stripe: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;
|
2017-01-08 12:13:18 +03:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
struct bucket {
|
|
|
|
union {
|
|
|
|
struct bucket_mark _mark;
|
|
|
|
const struct bucket_mark mark;
|
|
|
|
};
|
2018-04-11 02:19:09 +03:00
|
|
|
|
|
|
|
u16 io_time[2];
|
2018-12-12 14:21:55 +03:00
|
|
|
unsigned gen_valid:1;
|
2017-01-08 12:13:18 +03:00
|
|
|
};
|
|
|
|
|
2017-12-28 04:32:40 +03:00
|
|
|
struct bucket_array {
|
|
|
|
struct rcu_head rcu;
|
|
|
|
u16 first_bucket;
|
|
|
|
size_t nbuckets;
|
|
|
|
struct bucket b[];
|
|
|
|
};
|
|
|
|
|
2017-03-12 17:53:43 +03:00
|
|
|
struct bch_dev_usage {
|
2017-12-23 04:37:52 +03:00
|
|
|
u64 buckets[BCH_DATA_NR];
|
2017-03-12 17:53:43 +03:00
|
|
|
u64 buckets_alloc;
|
2018-11-23 11:04:34 +03:00
|
|
|
u64 buckets_ec;
|
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-12-23 04:37:52 +03:00
|
|
|
u64 sectors[BCH_DATA_NR];
|
2018-03-20 10:54:50 +03:00
|
|
|
u64 sectors_fragmented;
|
2017-12-23 04:37:52 +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
|
|
|
|
2018-12-12 14:21:55 +03:00
|
|
|
/* summarized: */
|
|
|
|
struct bch_fs_usage_summarized {
|
|
|
|
u64 online_reserved;
|
|
|
|
|
|
|
|
/* fields after online_reserved are cleared/recalculated by gc: */
|
|
|
|
u64 gc_start[0];
|
|
|
|
|
|
|
|
u64 hidden;
|
|
|
|
u64 data;
|
|
|
|
u64 cached;
|
|
|
|
u64 reserved;
|
|
|
|
u64 nr_inodes;
|
|
|
|
} s;
|
|
|
|
|
|
|
|
/* broken out: */
|
2017-06-14 04:06:05 +03:00
|
|
|
struct {
|
2018-08-16 02:41:24 +03:00
|
|
|
u64 data[BCH_DATA_NR];
|
2018-11-23 11:04:34 +03:00
|
|
|
u64 ec_data;
|
2017-06-14 04:06:05 +03:00
|
|
|
u64 persistent_reserved;
|
2018-08-16 02:41:24 +03:00
|
|
|
} replicas[BCH_REPLICAS_MAX];
|
|
|
|
|
|
|
|
u64 buckets[BCH_DATA_NR];
|
2018-12-12 14:21:55 +03:00
|
|
|
};
|
2018-11-23 11:04:34 +03:00
|
|
|
|
2018-12-12 14:21:55 +03:00
|
|
|
struct bch_fs_usage_short {
|
|
|
|
u64 capacity;
|
|
|
|
u64 used;
|
|
|
|
u64 nr_inodes;
|
2017-01-08 12:13:18 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* A reservation for space on disk:
|
|
|
|
*/
|
|
|
|
struct disk_reservation {
|
2018-12-12 14:21:55 +03:00
|
|
|
u64 sectors;
|
|
|
|
u32 gen;
|
|
|
|
unsigned nr_replicas;
|
2017-01-08 12:13:18 +03:00
|
|
|
};
|
|
|
|
|
2017-12-14 00:01:18 +03:00
|
|
|
struct copygc_heap_entry {
|
2018-04-11 02:19:09 +03:00
|
|
|
u8 gen;
|
|
|
|
u32 sectors;
|
2017-12-14 00:01:18 +03:00
|
|
|
u64 offset;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef HEAP(struct copygc_heap_entry) copygc_heap;
|
|
|
|
|
2017-01-08 12:13:18 +03:00
|
|
|
#endif /* _BUCKETS_TYPES_H */
|