From 9a6f11ed8f421fb1cc7b37390e32316ff4701f5d Mon Sep 17 00:00:00 2001
From: Chris Mason <chris.mason@oracle.com>
Date: Tue, 27 Mar 2007 09:06:38 -0400
Subject: [PATCH] Btrfs: split out level field in struct header

Signed-off-by: Chris Mason <chris.mason@oracle.com>
---
 fs/btrfs/TODO    | 5 -----
 fs/btrfs/ctree.c | 1 +
 fs/btrfs/ctree.h | 8 +++-----
 3 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/fs/btrfs/TODO b/fs/btrfs/TODO
index 7aec75e9a37e5..e9371385ccc01 100644
--- a/fs/btrfs/TODO
+++ b/fs/btrfs/TODO
@@ -1,12 +1,7 @@
 * cleanup, add more error checking, get rid of BUG_ONs
-* Make IO functions look more like the page cache
 * Fix ENOSPC handling
-* make a real mkfs and superblock
 * Do checksumming
-* Use a real check instead of mark_buffer_dirty
-* Define FS objects in terms of different item types
 * Add block mapping tree (simple dm layer)
-* Add simple tree locking (semaphore per tree)
 * Make allocator smarter
 * make level a field in header
 * add a block group to struct inode
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index b33a6bfaf327d..48c611948d119 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -753,6 +753,7 @@ static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
 	split_buffer = btrfs_alloc_free_block(trans, root);
 	split = btrfs_buffer_node(split_buffer);
 	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->b_blocknr);
 	btrfs_set_header_generation(&split->header, trans->transid);
 	btrfs_set_header_parentid(&split->header,
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 1a98952e0faf9..a4ad39b58a4b7 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -59,7 +59,7 @@ struct btrfs_header {
 	__le32 ham;
 	__le16 nritems;
 	__le16 flags;
-	/* generation flags to be added */
+	u8 level;
 } __attribute__ ((__packed__));
 
 #define BTRFS_MAX_LEVEL 8
@@ -648,15 +648,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)
-- 
2.30.2