add generation to file extents
authorChris Mason <chris.mason@oracle.com>
Tue, 27 Mar 2007 13:15:24 +0000 (09:15 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Tue, 27 Mar 2007 13:15:24 +0000 (09:15 -0400)
ctree.c
ctree.h

diff --git a/ctree.c b/ctree.c
index 3292264..b0b13bc 100644 (file)
--- 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 00810f3..3349281 100644 (file)
--- 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)
 {