summaryrefslogtreecommitdiff
path: root/ctree.h
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-02-20 16:40:44 -0500
committerDavid Woodhouse <dwmw2@hera.kernel.org>2007-02-20 16:40:44 -0500
commitc12e4863d20a5c238ba11ed5fb47dc7bd632951c (patch)
treedfdc5e08101a0952ab0d65c3be5bc5ac59037c08 /ctree.h
parent1c62d091b2eb16b549e588e9f640721976596d6a (diff)
early extent mapping support
Diffstat (limited to 'ctree.h')
-rw-r--r--ctree.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/ctree.h b/ctree.h
index 586bf186..b737925b 100644
--- a/ctree.h
+++ b/ctree.h
@@ -1,7 +1,7 @@
#ifndef __CTREE__
#define __CTREE__
-#define CTREE_BLOCKSIZE 4096
+#define CTREE_BLOCKSIZE 256
struct key {
u64 objectid;
@@ -22,18 +22,41 @@ struct header {
#define NODEPTRS_PER_BLOCK ((CTREE_BLOCKSIZE - sizeof(struct header)) / \
(sizeof(struct key) + sizeof(u64)))
-#define LEVEL_BITS 3
-#define MAX_LEVEL (1 << LEVEL_BITS)
+#define MAX_LEVEL 8
#define node_level(f) ((f) & (MAX_LEVEL-1))
#define is_leaf(f) (node_level(f) == 0)
struct tree_buffer;
+
+struct alloc_extent {
+ u64 blocknr;
+ u64 num_blocks;
+ u64 num_used;
+} __attribute__ ((__packed__));
+
struct ctree_root {
struct tree_buffer *node;
+ struct ctree_root *extent_root;
+ struct alloc_extent *alloc_extent;
+ struct alloc_extent *reserve_extent;
int fp;
struct radix_tree_root cache_radix;
+ struct alloc_extent ai1;
+ struct alloc_extent ai2;
};
+struct ctree_root_info {
+ u64 fsid[2]; /* FS specific uuid */
+ u64 blocknr; /* blocknr of this block */
+ u64 objectid; /* inode number of this root */
+ u64 tree_root; /* the tree root */
+ u32 csum;
+ u32 ham;
+ struct alloc_extent alloc_extent;
+ struct alloc_extent reserve_extent;
+ u64 snapuuid[2]; /* root specific uuid */
+} __attribute__ ((__packed__));
+
struct item {
struct key key;
u16 offset;
@@ -55,6 +78,11 @@ struct node {
u64 blockptrs[NODEPTRS_PER_BLOCK];
} __attribute__ ((__packed__));
+struct extent_item {
+ u32 refs;
+ u64 owner;
+} __attribute__ ((__packed__));
+
struct ctree_path {
struct tree_buffer *nodes[MAX_LEVEL];
int slots[MAX_LEVEL];