Btrfs: add mkfs.c
[linux-2.6-block.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
eb60ceac
CM
60struct item {
61 struct key key;
62 u16 offset;
63 u16 size;
64} __attribute__ ((__packed__));
65
66#define LEAF_DATA_SIZE (CTREE_BLOCKSIZE - sizeof(struct header))
67struct leaf {
68 struct header header;
69 union {
70 struct item items[LEAF_DATA_SIZE/sizeof(struct item)];
71 u8 data[CTREE_BLOCKSIZE-sizeof(struct header)];
72 };
73} __attribute__ ((__packed__));
74
75struct node {
76 struct header header;
77 struct key keys[NODEPTRS_PER_BLOCK];
78 u64 blockptrs[NODEPTRS_PER_BLOCK];
79} __attribute__ ((__packed__));
80
d97e63b6
CM
81struct extent_item {
82 u32 refs;
83 u64 owner;
84} __attribute__ ((__packed__));
85
eb60ceac
CM
86struct ctree_path {
87 struct tree_buffer *nodes[MAX_LEVEL];
88 int slots[MAX_LEVEL];
89};
90#endif