@@ -53,8 +53,8 @@ static inline void memmove_leaf_data(const struct extent_buffer *dst,
unsigned long src_offset,
unsigned long len)
{
- dst_offset += BTRFS_LEAF_DATA_OFFSET;
- src_offset += BTRFS_LEAF_DATA_OFFSET;
+ dst_offset += BTRFS_LEAF_DATA_OFFSET(dst);
+ src_offset += BTRFS_LEAF_DATA_OFFSET(dst);
memmove_extent_buffer(dst, dst_offset, src_offset, len);
}
@@ -63,8 +63,8 @@ static inline void copy_leaf_data(const struct extent_buffer *dst,
unsigned long dst_offset,
unsigned long src_offset, unsigned long len)
{
- dst_offset += BTRFS_LEAF_DATA_OFFSET;
- src_offset += BTRFS_LEAF_DATA_OFFSET;
+ dst_offset += BTRFS_LEAF_DATA_OFFSET(dst);
+ src_offset += BTRFS_LEAF_DATA_OFFSET(dst);
copy_extent_buffer(dst, src, dst_offset, src_offset, len);
}
@@ -1422,7 +1422,10 @@ static inline u32 BTRFS_LEAF_DATA_SIZE(const struct btrfs_fs_info *info)
return info->nodesize - sizeof(struct btrfs_header);
}
-#define BTRFS_LEAF_DATA_OFFSET offsetof(struct btrfs_leaf, items)
+static inline unsigned long BTRFS_LEAF_DATA_OFFSET(const struct extent_buffer *leaf)
+{
+ return offsetof(struct btrfs_leaf, items);
+}
static inline u32 BTRFS_MAX_ITEM_SIZE(const struct btrfs_fs_info *info)
{
@@ -2692,11 +2695,11 @@ BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cursor_right,
/* helper function to cast into the data area of the leaf. */
#define btrfs_item_ptr(leaf, slot, type) \
- ((type *)(BTRFS_LEAF_DATA_OFFSET + \
+ ((type *)(BTRFS_LEAF_DATA_OFFSET(leaf) + \
btrfs_item_offset(leaf, slot)))
#define btrfs_item_ptr_offset(leaf, slot) \
- ((unsigned long)(BTRFS_LEAF_DATA_OFFSET + \
+ ((unsigned long)(BTRFS_LEAF_DATA_OFFSET(leaf) + \
btrfs_item_offset(leaf, slot)))
static inline u32 btrfs_crc32c(u32 crc, const void *address, unsigned length)
@@ -4508,7 +4508,7 @@ static void prepare_eb_write(struct extent_buffer *eb)
* header 0 1 2 .. N ... data_N .. data_2 data_1 data_0
*/
start = btrfs_item_nr_offset(nritems);
- end = BTRFS_LEAF_DATA_OFFSET + leaf_data_end(eb);
+ end = BTRFS_LEAF_DATA_OFFSET(eb) + leaf_data_end(eb);
memzero_extent_buffer(eb, start, end - start);
}
}
When I expand the size of the btrfs_header we're going to need to conditionally return a different offset. Signed-off-by: Josef Bacik <josef@toxicpanda.com> --- fs/btrfs/ctree.c | 8 ++++---- fs/btrfs/ctree.h | 9 ++++++--- fs/btrfs/extent_io.c | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-)