summaryrefslogtreecommitdiff
path: root/bcache.h
blob: 5cf08bc1095ca3e364120a4cd46e55ec9276edbe (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
#ifndef _BCACHE_H
#define _BCACHE_H

static const char bcache_magic[] = {
	0xc6, 0x85, 0x73, 0xf6, 0x4e, 0x1a, 0x45, 0xca,
	0x82, 0x65, 0xf5, 0x7f, 0x48, 0xba, 0x6d, 0x81 };

#define SB_LABEL_SIZE	32

struct cache_sb {
	uint64_t	csum;
	uint64_t	offset_this_sb;
	uint64_t	version;
#define CACHE_BACKING_DEV	1

	uint8_t		magic[16];

	uint8_t		uuid[16];
	uint8_t		set_uuid[16];
	uint8_t		label[SB_LABEL_SIZE];

#define CACHE_SYNC		(1U << 0)

#define BDEV_WRITEBACK_BIT		0U

#define BDEV_STATE_NONE		0U
#define BDEV_STATE_CLEAN	1U
#define BDEV_STATE_DIRTY	2U
#define BDEV_STATE_STALE	3U
	uint64_t	flags;
	uint64_t	sequence;
	uint64_t	pad[8];

	uint64_t	nbuckets;	/* device size */
	uint16_t	block_size;	/* sectors */
	uint16_t	bucket_size;	/* sectors */

	uint16_t	nr_in_set;
	uint16_t	nr_this_dev;

	uint32_t	last_mount;	/* time_t */

	uint16_t	first_bucket;
	uint16_t	njournal_buckets;
	uint64_t	journal_buckets[];
};

struct bkey {
	uint64_t	header;
	uint64_t	key;
	uint64_t	ptr[];
};

struct bucket_disk {
	uint16_t	priority;
	uint8_t		generation;
} __attribute((packed));

#endif