|
@@ -3613,6 +3613,19 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
|
|
|
if (left_nritems == 0)
|
|
|
goto out_unlock;
|
|
|
|
|
|
+ if (path->slots[0] == left_nritems && !empty) {
|
|
|
+ /* Key greater than all keys in the leaf, right neighbor has
|
|
|
+ * enough room for it and we're not emptying our leaf to delete
|
|
|
+ * it, therefore use right neighbor to insert the new item and
|
|
|
+ * no need to touch/dirty our left leaft. */
|
|
|
+ btrfs_tree_unlock(left);
|
|
|
+ free_extent_buffer(left);
|
|
|
+ path->nodes[0] = right;
|
|
|
+ path->slots[0] = 0;
|
|
|
+ path->slots[1]++;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
return __push_leaf_right(trans, root, path, min_data_size, empty,
|
|
|
right, free_space, left_nritems, min_slot);
|
|
|
out_unlock:
|