diff options
author | Chris Mason <clm@fb.com> | 2017-02-27 13:11:53 -0800 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2017-02-27 13:11:53 -0800 |
commit | ef6ebf324216eaea95ff30da5a8e78e2a4311eba (patch) | |
tree | 5357c0d811540028845a3e303a1bf2101b9a22a6 /fs/btrfs/ctree.c | |
parent | 6288d6eabc7505f42dda34a2c2962f91914be3a4 (diff) | |
parent | 263d3995c93c6020576f6c93506412a0b9d1e932 (diff) |
Merge branch 'for-chris-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/fdmanana/linux into for-linus-4.11
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 1192bc7d2ee7..1fb60ee77b4a 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -4159,6 +4159,9 @@ static noinline int push_for_double_split(struct btrfs_trans_handle *trans, /* try to push all the items before our slot into the next leaf */ slot = path->slots[0]; + space_needed = data_size; + if (slot > 0) + space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]); ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); if (ret < 0) return ret; @@ -4214,6 +4217,10 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans, if (wret < 0) return wret; if (wret) { + space_needed = data_size; + if (slot > 0) + space_needed -= btrfs_leaf_free_space(fs_info, + l); wret = push_leaf_left(trans, root, path, space_needed, space_needed, 0, (u32)-1); if (wret < 0) |