]> git.karo-electronics.de Git - mv-sheeva.git/blob - fs/btrfs/ctree.h
Btrfs: Block sized tree extents and extent deletion
[mv-sheeva.git] / fs / btrfs / ctree.h
1 #ifndef __CTREE__
2 #define __CTREE__
3
4 #define CTREE_BLOCKSIZE 256
5
6 struct key {
7         u64 objectid;
8         u32 flags;
9         u64 offset;
10 } __attribute__ ((__packed__));
11
12 struct 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
25 #define MAX_LEVEL 8
26 #define node_level(f) ((f) & (MAX_LEVEL-1))
27 #define is_leaf(f) (node_level(f) == 0)
28
29 struct tree_buffer;
30
31 struct ctree_root {
32         struct tree_buffer *node;
33         struct ctree_root *extent_root;
34         struct key current_insert;
35         int fp;
36         struct radix_tree_root cache_radix;
37 };
38
39 struct ctree_root_info {
40         u64 fsid[2]; /* FS specific uuid */
41         u64 blocknr; /* blocknr of this block */
42         u64 objectid; /* inode number of this root */
43         u64 tree_root; /* the tree root */
44         u32 csum;
45         u32 ham;
46         u64 snapuuid[2]; /* root specific uuid */
47 } __attribute__ ((__packed__));
48
49 struct ctree_super_block {
50         struct ctree_root_info root_info;
51         struct ctree_root_info extent_info;
52 } __attribute__ ((__packed__));
53
54 struct item {
55         struct key key;
56         u16 offset;
57         u16 size;
58 } __attribute__ ((__packed__));
59
60 #define LEAF_DATA_SIZE (CTREE_BLOCKSIZE - sizeof(struct header))
61 struct leaf {
62         struct header header;
63         union {
64                 struct item items[LEAF_DATA_SIZE/sizeof(struct item)];
65                 u8 data[CTREE_BLOCKSIZE-sizeof(struct header)];
66         };
67 } __attribute__ ((__packed__));
68
69 struct node {
70         struct header header;
71         struct key keys[NODEPTRS_PER_BLOCK];
72         u64 blockptrs[NODEPTRS_PER_BLOCK];
73 } __attribute__ ((__packed__));
74
75 struct extent_item {
76         u32 refs;
77         u64 owner;
78 } __attribute__ ((__packed__));
79
80 struct ctree_path {
81         struct tree_buffer *nodes[MAX_LEVEL];
82         int slots[MAX_LEVEL];
83 };
84 #endif