blob: 6bbdcd26fba4e63c1b24ec5be5de1d69f2709ba4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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 */
|