diff options
| -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, | |||
| 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) |
