Btrfs: sha256 csums on metadata
[linux-2.6-block.git] / fs / btrfs / ctree.h
index 7b7120d3ab4229dc9bd78f34d4490036295e8247..6ff87f44c5d8d2ab08ec811b110e5f3fb8830473 100644 (file)
@@ -9,10 +9,11 @@ struct btrfs_transaction;
 
 #define BTRFS_MAGIC "_BtRfS_M"
 
-#define BTRFS_ROOT_TREE_OBJECTID 1
-#define BTRFS_EXTENT_TREE_OBJECTID 2
-#define BTRFS_INODE_MAP_OBJECTID 3
-#define BTRFS_FS_TREE_OBJECTID 4
+#define BTRFS_ROOT_TREE_OBJECTID 1ULL
+#define BTRFS_EXTENT_TREE_OBJECTID 2ULL
+#define BTRFS_INODE_MAP_OBJECTID 3ULL
+#define BTRFS_FS_TREE_OBJECTID 4ULL
+#define BTRFS_FIRST_FREE_OBJECTID 5ULL
 
 /*
  * we can actually store much bigger names, but lets not confuse the rest
@@ -50,15 +51,15 @@ struct btrfs_key {
  * every tree block (leaf or node) starts with this header.
  */
 struct btrfs_header {
+       __le32 csum[8];
        u8 fsid[16]; /* FS specific uuid */
        __le64 blocknr; /* which block this node is supposed to live in */
        __le64 generation;
        __le64 parentid; /* objectid of the tree root */
-       __le32 csum;
        __le32 ham;
        __le16 nritems;
        __le16 flags;
-       /* generation flags to be added */
+       u8 level;
 } __attribute__ ((__packed__));
 
 #define BTRFS_MAX_LEVEL 8
@@ -74,9 +75,10 @@ struct buffer_head;
  * it currently lacks any block count etc etc
  */
 struct btrfs_super_block {
+       __le32 csum[8];
+       /* the first 3 fields must match struct btrfs_header */
        u8 fsid[16];    /* FS specific uuid */
        __le64 blocknr; /* this block number */
-       __le32 csum;
        __le64 magic;
        __le32 blocksize;
        __le64 generation;
@@ -191,6 +193,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
@@ -215,6 +218,7 @@ struct btrfs_inode_map_item {
        struct btrfs_disk_key key;
 } __attribute__ ((__packed__));
 
+struct crypto_hash;
 struct btrfs_fs_info {
        struct btrfs_root *fs_root;
        struct btrfs_root *extent_root;
@@ -231,8 +235,11 @@ struct btrfs_fs_info {
        struct btrfs_super_block *disk_super;
        struct buffer_head *sb_buffer;
        struct super_block *sb;
+       struct inode *btree_inode;
        struct mutex trans_mutex;
        struct mutex fs_mutex;
+       struct crypto_hash *hash_tfm;
+       spinlock_t hash_lock;
 };
 
 /*
@@ -647,15 +654,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)
@@ -765,6 +770,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)
 {
@@ -887,5 +904,5 @@ int btrfs_alloc_file_extent(struct btrfs_trans_handle *trans,
 int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans,
                             struct btrfs_root *root,
                             struct btrfs_path *path, u64 objectid,
-                            u64 blocknr, u64 num_blocks, int mod);
+                            u64 blocknr, int mod);
 #endif