struct extent_item endian
authorChris Mason <chris.mason@oracle.com>
Tue, 13 Mar 2007 13:49:06 +0000 (09:49 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Tue, 13 Mar 2007 13:49:06 +0000 (09:49 -0400)
ctree.h
extent-tree.c
mkfs.c

diff --git a/ctree.h b/ctree.h
index a8454c4..90cc2c9 100644 (file)
--- a/ctree.h
+++ b/ctree.h
@@ -136,8 +136,8 @@ struct node {
  * owner of the block and the number of references
  */
 struct extent_item {
-       u32 refs;
-       u64 owner;
+       __le32 refs;
+       __le64 owner;
 } __attribute__ ((__packed__));
 
 /*
@@ -153,6 +153,26 @@ struct ctree_path {
        int slots[MAX_LEVEL];
 };
 
+static inline u64 btrfs_extent_owner(struct extent_item *ei)
+{
+       return le64_to_cpu(ei->owner);
+}
+
+static inline void btrfs_set_extent_owner(struct extent_item *ei, u64 val)
+{
+       ei->owner = cpu_to_le64(val);
+}
+
+static inline u32 btrfs_extent_refs(struct extent_item *ei)
+{
+       return le32_to_cpu(ei->refs);
+}
+
+static inline void btrfs_set_extent_refs(struct extent_item *ei, u32 val)
+{
+       ei->refs = cpu_to_le32(val);
+}
+
 static inline u64 btrfs_node_blockptr(struct node *n, int nr)
 {
        return le64_to_cpu(n->blockptrs[nr]);
index e511f48..1676a65 100644 (file)
@@ -29,6 +29,7 @@ static int inc_block_ref(struct ctree_root *root, u64 blocknr)
        struct leaf *l;
        struct extent_item *item;
        struct btrfs_key ins;
+       u32 refs;
 
        find_free_extent(root->extent_root, 0, 0, (u64)-1, &ins);
        init_path(&path);
@@ -42,7 +43,8 @@ static int inc_block_ref(struct ctree_root *root, u64 blocknr)
        l = &path.nodes[0]->leaf;
        item = (struct extent_item *)(l->data + btrfs_item_offset(l->items +
                                                                path.slots[0]));
-       item->refs++;
+       refs = btrfs_extent_refs(item);
+       btrfs_set_extent_refs(item, refs + 1);
 
        BUG_ON(list_empty(&path.nodes[0]->dirty));
        release_path(root->extent_root, &path);
@@ -69,7 +71,7 @@ static int lookup_block_ref(struct ctree_root *root, u64 blocknr, u32 *refs)
        item = (struct extent_item *)(l->data +
                                      btrfs_item_offset(l->items +
                                                        path.slots[0]));
-       *refs = item->refs;
+       *refs = btrfs_extent_refs(item);
        release_path(root->extent_root, &path);
        return 0;
 }
@@ -120,9 +122,9 @@ static int finish_current_insert(struct ctree_root *extent_root)
        int i;
        int ret;
 
-       extent_item.refs = 1;
-       extent_item.owner =
-               btrfs_header_parentid(&extent_root->node->node.header);
+       btrfs_set_extent_refs(&extent_item, 1);
+       btrfs_set_extent_owner(&extent_item,
+               btrfs_header_parentid(&extent_root->node->node.header));
        ins.offset = 1;
        ins.flags = 0;
 
@@ -148,6 +150,7 @@ int __free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks)
        struct btrfs_item *item;
        struct extent_item *ei;
        struct btrfs_key ins;
+       u32 refs;
 
        key.objectid = blocknr;
        key.flags = 0;
@@ -166,8 +169,9 @@ int __free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks)
        ei = (struct extent_item *)(path.nodes[0]->leaf.data +
                                    btrfs_item_offset(item));
        BUG_ON(ei->refs == 0);
-       ei->refs--;
-       if (ei->refs == 0) {
+       refs = btrfs_extent_refs(ei) - 1;
+       btrfs_set_extent_refs(ei, refs);
+       if (refs == 0) {
                if (root == extent_root) {
                        int err;
                        radix_tree_preload(GFP_KERNEL);
@@ -368,8 +372,8 @@ int alloc_extent(struct ctree_root *root, u64 num_blocks, u64 search_start,
        struct ctree_root *extent_root = root->extent_root;
        struct extent_item extent_item;
 
-       extent_item.refs = 1;
-       extent_item.owner = owner;
+       btrfs_set_extent_refs(&extent_item, 1);
+       btrfs_set_extent_owner(&extent_item, owner);
 
        if (root == extent_root) {
                BUG_ON(extent_root->current_insert.offset == 0);
diff --git a/mkfs.c b/mkfs.c
index 0f77bab..e0d3bc1 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -51,8 +51,8 @@ int mkfs(int fd)
        btrfs_set_item_offset(&item,
                              LEAF_DATA_SIZE - sizeof(struct extent_item));
        btrfs_set_item_size(&item, sizeof(struct extent_item));
-       extent_item.refs = 1;
-       extent_item.owner = 0;
+       btrfs_set_extent_refs(&extent_item, 1);
+       btrfs_set_extent_owner(&extent_item, 0);
        memcpy(empty_leaf.items, &item, sizeof(item));
        memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
                btrfs_item_size(&item));
@@ -62,7 +62,7 @@ int mkfs(int fd)
        btrfs_set_key_offset(&item.key, 1);
        btrfs_set_item_offset(&item,
                              LEAF_DATA_SIZE - sizeof(struct extent_item) * 2);
-       extent_item.owner = 1;
+       btrfs_set_extent_owner(&extent_item, 1);
        memcpy(empty_leaf.items + 1, &item, sizeof(item));
        memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
                btrfs_item_size(&item));
@@ -72,7 +72,7 @@ int mkfs(int fd)
        btrfs_set_key_offset(&item.key, 1);
        btrfs_set_item_offset(&item,
                              LEAF_DATA_SIZE - sizeof(struct extent_item) * 3);
-       extent_item.owner = 2;
+       btrfs_set_extent_owner(&extent_item, 2);
        memcpy(empty_leaf.items + 2, &item, sizeof(item));
        memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
                btrfs_item_size(&item));