Block sized tree extents and extent deletion
[btrfs-progs-unstable.git] / ctree.h
blob8c32c0e9267d439a266c0949d5f28f97ee48527e
1 #ifndef __CTREE__
2 #define __CTREE__
4 #define CTREE_BLOCKSIZE 256
6 struct key {
7 u64 objectid;
8 u32 flags;
9 u64 offset;
10 } __attribute__ ((__packed__));
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__));
22 #define NODEPTRS_PER_BLOCK ((CTREE_BLOCKSIZE - sizeof(struct header)) / \
23 (sizeof(struct key) + sizeof(u64)))
25 #define MAX_LEVEL 8
26 #define node_level(f) ((f) & (MAX_LEVEL-1))
27 #define is_leaf(f) (node_level(f) == 0)
29 struct tree_buffer;
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;
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__));
49 struct ctree_super_block {
50 struct ctree_root_info root_info;
51 struct ctree_root_info extent_info;
52 } __attribute__ ((__packed__));
54 struct item {
55 struct key key;
56 u16 offset;
57 u16 size;
58 } __attribute__ ((__packed__));
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)];
67 } __attribute__ ((__packed__));
69 struct node {
70 struct header header;
71 struct key keys[NODEPTRS_PER_BLOCK];
72 u64 blockptrs[NODEPTRS_PER_BLOCK];
73 } __attribute__ ((__packed__));
75 struct extent_item {
76 u32 refs;
77 u64 owner;
78 } __attribute__ ((__packed__));
80 struct ctree_path {
81 struct tree_buffer *nodes[MAX_LEVEL];
82 int slots[MAX_LEVEL];
84 #endif