aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.c
diff options
context:
space:
mode:
authorChris Mason <clm@fb.com>2017-02-27 13:11:53 -0800
committerChris Mason <clm@fb.com>2017-02-27 13:11:53 -0800
commitef6ebf324216eaea95ff30da5a8e78e2a4311eba (patch)
tree5357c0d811540028845a3e303a1bf2101b9a22a6 /fs/btrfs/ctree.c
parentBtrfs: use the correct type when creating cow dio extent (diff)
parentBtrfs: try harder to migrate items to left sibling before splitting a leaf (diff)
downloadlinux-dev-ef6ebf324216eaea95ff30da5a8e78e2a4311eba.tar.xz
linux-dev-ef6ebf324216eaea95ff30da5a8e78e2a4311eba.zip
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.c7
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)