add leaf data casting helper
authorChris Mason <chris.mason@oracle.com>
Wed, 14 Mar 2007 14:31:29 +0000 (10:31 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Wed, 14 Mar 2007 14:31:29 +0000 (10:31 -0400)
ctree.h
extent-tree.c
print-tree.c

diff --git a/ctree.h b/ctree.h
index 0968899..05c7707 100644 (file)
--- a/ctree.h
+++ b/ctree.h
@@ -401,6 +401,10 @@ static inline void btrfs_set_super_blocksize(struct btrfs_super_block *s,
        s->blocksize = cpu_to_le16(val);
 }
 
+/* helper function to cast into the data area of the leaf. */
+#define btrfs_item_ptr(leaf, slot, type) \
+       ((type *)((leaf)->data + btrfs_item_offset((leaf)->items + (slot))))
+
 struct btrfs_buffer *btrfs_alloc_free_block(struct btrfs_root *root);
 int btrfs_inc_ref(struct btrfs_root *root, struct btrfs_buffer *buf);
 int btrfs_free_extent(struct btrfs_root *root, u64 blocknr, u64 num_blocks);
index 7f156d9..3767744 100644 (file)
@@ -41,9 +41,7 @@ static int inc_block_ref(struct btrfs_root *root, u64 blocknr)
                BUG();
        BUG_ON(ret != 0);
        l = &path.nodes[0]->leaf;
-       item = (struct btrfs_extent_item *)(l->data +
-                                           btrfs_item_offset(l->items +
-                                                             path.slots[0]));
+       item = btrfs_item_ptr(l, path.slots[0], struct btrfs_extent_item);
        refs = btrfs_extent_refs(item);
        btrfs_set_extent_refs(item, refs + 1);
 
@@ -69,9 +67,7 @@ static int lookup_block_ref(struct btrfs_root *root, u64 blocknr, u32 *refs)
        if (ret != 0)
                BUG();
        l = &path.nodes[0]->leaf;
-       item = (struct btrfs_extent_item *)(l->data +
-                                     btrfs_item_offset(l->items +
-                                                       path.slots[0]));
+       item = btrfs_item_ptr(l, path.slots[0], struct btrfs_extent_item);
        *refs = btrfs_extent_refs(item);
        btrfs_release_path(root->extent_root, &path);
        return 0;
index 64829b6..e769f36 100644 (file)
@@ -26,11 +26,10 @@ void btrfs_print_leaf(struct btrfs_leaf *l)
                        btrfs_item_size(item));
                printf("\t\titem data %.*s\n", btrfs_item_size(item),
                        l->data + btrfs_item_offset(item));
-               ei = (struct btrfs_extent_item *)(l->data +
-                                                 btrfs_item_offset(item));
+               ei = btrfs_item_ptr(l, i, struct btrfs_extent_item);
                printf("\t\textent data refs %u owner %Lu\n",
                        btrfs_extent_refs(ei), btrfs_extent_owner(ei));
-               ri = (struct btrfs_root_item *)ei;
+               ri = btrfs_item_ptr(l, i, struct btrfs_root_item);
                printf("\t\troot data blocknr %Lu refs %u\n",
                        btrfs_root_blocknr(ri), btrfs_root_refs(ri));
                fflush(stdout);