summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ctree.c1
-rw-r--r--ctree.h21
2 files changed, 17 insertions, 5 deletions
diff --git a/ctree.c b/ctree.c
index 32922643..b0b13bca 100644
--- a/ctree.c
+++ b/ctree.c
@@ -746,6 +746,7 @@ static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
split_buffer = btrfs_alloc_free_block(trans, root);
split = &split_buffer->node;
btrfs_set_header_flags(&split->header, btrfs_header_flags(&c->header));
+ btrfs_set_header_level(&split->header, btrfs_header_level(&c->header));
btrfs_set_header_blocknr(&split->header, split_buffer->blocknr);
btrfs_set_header_parentid(&split->header,
btrfs_header_parentid(&root->node->node.header));
diff --git a/ctree.h b/ctree.h
index 00810f35..3349281e 100644
--- a/ctree.h
+++ b/ctree.h
@@ -52,7 +52,7 @@ struct btrfs_header {
__le32 ham;
__le16 nritems;
__le16 flags;
- /* generation flags to be added */
+ u8 level;
} __attribute__ ((__packed__));
#define BTRFS_MAX_LEVEL 8
@@ -185,6 +185,7 @@ struct btrfs_root_item {
} __attribute__ ((__packed__));
struct btrfs_file_extent_item {
+ __le64 generation;
/*
* disk space consumed by the extent, checksum blocks are included
* in these numbers
@@ -618,15 +619,13 @@ static inline void btrfs_set_header_flags(struct btrfs_header *h, u16 val)
static inline int btrfs_header_level(struct btrfs_header *h)
{
- return btrfs_header_flags(h) & (BTRFS_MAX_LEVEL - 1);
+ return h->level;
}
static inline void btrfs_set_header_level(struct btrfs_header *h, int level)
{
- u16 flags;
BUG_ON(level > BTRFS_MAX_LEVEL);
- flags = btrfs_header_flags(h) & ~(BTRFS_MAX_LEVEL - 1);
- btrfs_set_header_flags(h, flags | level);
+ h->level = level;
}
static inline int btrfs_is_leaf(struct btrfs_node *n)
@@ -736,6 +735,18 @@ static inline void btrfs_set_file_extent_disk_blocknr(struct
e->disk_blocknr = cpu_to_le64(val);
}
+static inline u64 btrfs_file_extent_generation(struct btrfs_file_extent_item *e)
+{
+ return le64_to_cpu(e->generation);
+}
+
+static inline void btrfs_set_file_extent_generation(struct
+ btrfs_file_extent_item *e,
+ u64 val)
+{
+ e->generation = cpu_to_le64(val);
+}
+
static inline u64 btrfs_file_extent_disk_num_blocks(struct
btrfs_file_extent_item *e)
{