diff options
-rw-r--r-- | fs/btrfs/accessors.h | 13 | ||||
-rw-r--r-- | fs/btrfs/ctree.c | 13 | ||||
-rw-r--r-- | fs/btrfs/extent_io.c | 6 |
3 files changed, 18 insertions, 14 deletions
diff --git a/fs/btrfs/accessors.h b/fs/btrfs/accessors.h index 57ba6894a5f4..b9d9a69685df 100644 --- a/fs/btrfs/accessors.h +++ b/fs/btrfs/accessors.h @@ -897,19 +897,6 @@ const char *btrfs_super_csum_name(u16 csum_type); const char *btrfs_super_csum_driver(u16 csum_type); size_t __attribute_const__ btrfs_get_num_csums(void); -/* - * The leaf data grows from end-to-front in the node. this returns the address - * of the start of the last item, which is the stop of the leaf data stack. - */ -static inline unsigned int leaf_data_end(const struct extent_buffer *leaf) -{ - u32 nr = btrfs_header_nritems(leaf); - - if (nr == 0) - return BTRFS_LEAF_DATA_SIZE(leaf->fs_info); - return btrfs_item_offset(leaf, nr - 1); -} - /* struct btrfs_file_extent_item */ BTRFS_SETGET_STACK_FUNCS(stack_file_extent_type, struct btrfs_file_extent_item, type, 8); diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index f75e398d7b71..dc38c24a0ffa 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -51,6 +51,19 @@ static const struct btrfs_csums { .driver = "blake2b-256" }, }; +/* + * The leaf data grows from end-to-front in the node. this returns the address + * of the start of the last item, which is the stop of the leaf data stack. + */ +static unsigned int leaf_data_end(const struct extent_buffer *leaf) +{ + u32 nr = btrfs_header_nritems(leaf); + + if (nr == 0) + return BTRFS_LEAF_DATA_SIZE(leaf->fs_info); + return btrfs_item_offset(leaf, nr - 1); +} + int btrfs_super_csum_size(const struct btrfs_super_block *s) { u16 t = btrfs_super_csum_type(s); diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 8528e7d3f38f..9fc9f8068069 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -2537,7 +2537,11 @@ 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; + if (nritems == 0) + end += BTRFS_LEAF_DATA_SIZE(eb->fs_info); + else + end += btrfs_item_offset(eb, nritems - 1); memzero_extent_buffer(eb, start, end - start); } } |