aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/ctree.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index e8b32641ea90..e7bea1d5f75f 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -3298,14 +3298,21 @@ static noinline int split_node(struct btrfs_trans_handle *trans,
3298 */ 3298 */
3299static int leaf_space_used(struct extent_buffer *l, int start, int nr) 3299static int leaf_space_used(struct extent_buffer *l, int start, int nr)
3300{ 3300{
3301 struct btrfs_item *start_item;
3302 struct btrfs_item *end_item;
3303 struct btrfs_map_token token;
3301 int data_len; 3304 int data_len;
3302 int nritems = btrfs_header_nritems(l); 3305 int nritems = btrfs_header_nritems(l);
3303 int end = min(nritems, start + nr) - 1; 3306 int end = min(nritems, start + nr) - 1;
3304 3307
3305 if (!nr) 3308 if (!nr)
3306 return 0; 3309 return 0;
3307 data_len = btrfs_item_end_nr(l, start); 3310 btrfs_init_map_token(&token);
3308 data_len = data_len - btrfs_item_offset_nr(l, end); 3311 start_item = btrfs_item_nr(l, start);
3312 end_item = btrfs_item_nr(l, end);
3313 data_len = btrfs_token_item_offset(l, start_item, &token) +
3314 btrfs_token_item_size(l, start_item, &token);
3315 data_len = data_len - btrfs_token_item_offset(l, end_item, &token);
3309 data_len += sizeof(struct btrfs_item) * nr; 3316 data_len += sizeof(struct btrfs_item) * nr;
3310 WARN_ON(data_len < 0); 3317 WARN_ON(data_len < 0);
3311 return data_len; 3318 return data_len;