]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/btrfs/ctree.c
Merge remote-tracking branch 'regulator/topic/vctrl' into regulator-next
[karo-tx-linux.git] / fs / btrfs / ctree.c
index 1192bc7d2ee782c1c915ba71aa771e57762b7d06..7dc8844037e03b7cfb738d81af6c22b33ee2b31d 100644 (file)
@@ -453,8 +453,6 @@ __tree_mod_log_insert(struct btrfs_fs_info *fs_info, struct tree_mod_elem *tm)
        struct rb_node *parent = NULL;
        struct tree_mod_elem *cur;
 
-       BUG_ON(!tm);
-
        tm->seq = btrfs_inc_tree_mod_seq(fs_info);
 
        tm_root = &fs_info->tree_mod_log;
@@ -4159,6 +4157,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 +4215,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)