Btrfs: cleanup & comment
[linux-2.6-block.git] / fs / btrfs / ctree.h
CommitLineData
eb60ceac
CM
1#ifndef __CTREE__
2#define __CTREE__
3
5de08d7d 4#define CTREE_BLOCKSIZE 4096
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 30
eb60ceac
CM
31struct ctree_root {
32 struct tree_buffer *node;
d97e63b6 33 struct ctree_root *extent_root;
9a8dd150 34 struct key current_insert;
eb60ceac
CM
35 int fp;
36 struct radix_tree_root cache_radix;
37};
38
d97e63b6
CM
39struct 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;
d97e63b6
CM
46 u64 snapuuid[2]; /* root specific uuid */
47} __attribute__ ((__packed__));
48
cfaa7295
CM
49struct ctree_super_block {
50 struct ctree_root_info root_info;
51 struct ctree_root_info extent_info;
52} __attribute__ ((__packed__));
53
eb60ceac
CM
54struct 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))
61struct 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
69struct node {
70 struct header header;
71 struct key keys[NODEPTRS_PER_BLOCK];
72 u64 blockptrs[NODEPTRS_PER_BLOCK];
73} __attribute__ ((__packed__));
74
d97e63b6
CM
75struct extent_item {
76 u32 refs;
77 u64 owner;
78} __attribute__ ((__packed__));
79
eb60ceac
CM
80struct ctree_path {
81 struct tree_buffer *nodes[MAX_LEVEL];
82 int slots[MAX_LEVEL];
83};
5de08d7d
CM
84
85struct tree_buffer *alloc_free_block(struct ctree_root *root);
86int free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks);
87int search_slot(struct ctree_root *root, struct key *key, struct ctree_path *p, int ins_len);
88void release_path(struct ctree_root *root, struct ctree_path *p);
89void init_path(struct ctree_path *p);
90int del_item(struct ctree_root *root, struct ctree_path *path);
91int insert_item(struct ctree_root *root, struct key *key, void *data, int data_size);
92int next_leaf(struct ctree_root *root, struct ctree_path *path);
93int leaf_free_space(struct leaf *leaf);
eb60ceac 94#endif