aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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,
4159 4159
4160 /* try to push all the items before our slot into the next leaf */ 4160 /* try to push all the items before our slot into the next leaf */
4161 slot = path->slots[0]; 4161 slot = path->slots[0];
4162 space_needed = data_size;
4163 if (slot > 0)
4164 space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]);
4162 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); 4165 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot);
4163 if (ret < 0) 4166 if (ret < 0)
4164 return ret; 4167 return ret;
@@ -4214,6 +4217,10 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
4214 if (wret < 0) 4217 if (wret < 0)
4215 return wret; 4218 return wret;
4216 if (wret) { 4219 if (wret) {
4220 space_needed = data_size;
4221 if (slot > 0)
4222 space_needed -= btrfs_leaf_free_space(fs_info,
4223 l);
4217 wret = push_leaf_left(trans, root, path, space_needed, 4224 wret = push_leaf_left(trans, root, path, space_needed,
4218 space_needed, 0, (u32)-1); 4225 space_needed, 0, (u32)-1);
4219 if (wret < 0) 4226 if (wret < 0)