]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - fs/btrfs/ctree.h
Btrfs: switch to early splits
[mirror_ubuntu-bionic-kernel.git] / fs / btrfs / ctree.h
CommitLineData
eb60ceac
CM
1#ifndef __CTREE__
2#define __CTREE__
3
d97e63b6 4#define CTREE_BLOCKSIZE 256
eb60ceac
CM
5
6struct key {
7 u64 objectid;
8 u32 flags;
9 u64 offset;
10} __attribute__ ((__packed__));
11
12struct header {
13 u64 fsid[2]; /* FS specific uuid */
14 u64 blocknr;
15 u64 parentid;
16 u32 csum;
17 u32 ham;
18 u16 nritems;
19 u16 flags;
20} __attribute__ ((__packed__));
21
22#define NODEPTRS_PER_BLOCK ((CTREE_BLOCKSIZE - sizeof(struct header)) / \
23 (sizeof(struct key) + sizeof(u64)))
24
d97e63b6 25#define MAX_LEVEL 8
eb60ceac
CM
26#define node_level(f) ((f) & (MAX_LEVEL-1))
27#define is_leaf(f) (node_level(f) == 0)
28
29struct tree_buffer;
d97e63b6
CM
30
31struct alloc_extent {
32 u64 blocknr;
33 u64 num_blocks;
34 u64 num_used;
35} __attribute__ ((__packed__));
36
eb60ceac
CM
37struct ctree_root {
38 struct tree_buffer *node;
d97e63b6
CM
39 struct ctree_root *extent_root;
40 struct alloc_extent *alloc_extent;
41 struct alloc_extent *reserve_extent;
eb60ceac
CM
42 int fp;
43 struct radix_tree_root cache_radix;
d97e63b6
CM
44 struct alloc_extent ai1;
45 struct alloc_extent ai2;
eb60ceac
CM
46};
47
d97e63b6
CM
48struct ctree_root_info {
49 u64 fsid[2]; /* FS specific uuid */
50 u64 blocknr; /* blocknr of this block */
51 u64 objectid; /* inode number of this root */
52 u64 tree_root; /* the tree root */
53 u32 csum;
54 u32 ham;
55 struct alloc_extent alloc_extent;
56 struct alloc_extent reserve_extent;
57 u64 snapuuid[2]; /* root specific uuid */
58} __attribute__ ((__packed__));
59
cfaa7295
CM
60struct ctree_super_block {
61 struct ctree_root_info root_info;
62 struct ctree_root_info extent_info;
63} __attribute__ ((__packed__));
64
eb60ceac
CM
65struct item {
66 struct key key;
67 u16 offset;
68 u16 size;
69} __attribute__ ((__packed__));
70
71#define LEAF_DATA_SIZE (CTREE_BLOCKSIZE - sizeof(struct header))
72struct leaf {
73 struct header header;
74 union {
75 struct item items[LEAF_DATA_SIZE/sizeof(struct item)];
76 u8 data[CTREE_BLOCKSIZE-sizeof(struct header)];
77 };
78} __attribute__ ((__packed__));
79
80struct node {
81 struct header header;
82 struct key keys[NODEPTRS_PER_BLOCK];
83 u64 blockptrs[NODEPTRS_PER_BLOCK];
84} __attribute__ ((__packed__));
85
d97e63b6
CM
86struct extent_item {
87 u32 refs;
88 u64 owner;
89} __attribute__ ((__packed__));
90
eb60ceac
CM
91struct ctree_path {
92 struct tree_buffer *nodes[MAX_LEVEL];
93 int slots[MAX_LEVEL];
94};
95#endif