Btrfs: Avoid delayed reference update looping
btrfs_split_leaf and btrfs_del_items can end up in a loop where one is constantly spliting a given leaf and the other is constantly merging it back with the adjacent nodes. There is a better fix for this, but in the interest of something small, this patch just changes btrfs_del_items back to balancing less often. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
0a4eefbb74
commit
d717aa1d31
|
@ -1040,9 +1040,6 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
|
||||||
BTRFS_NODEPTRS_PER_BLOCK(root) / 4)
|
BTRFS_NODEPTRS_PER_BLOCK(root) / 4)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (btrfs_header_nritems(mid) > 2)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (btrfs_header_nritems(mid) < 2)
|
if (btrfs_header_nritems(mid) < 2)
|
||||||
err_on_enospc = 1;
|
err_on_enospc = 1;
|
||||||
|
|
||||||
|
@ -3796,7 +3793,7 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* delete the leaf if it is mostly empty */
|
/* delete the leaf if it is mostly empty */
|
||||||
if (used < BTRFS_LEAF_DATA_SIZE(root) / 2) {
|
if (used < BTRFS_LEAF_DATA_SIZE(root) / 3) {
|
||||||
/* push_leaf_left fixes the path.
|
/* push_leaf_left fixes the path.
|
||||||
* make sure the path still points to our leaf
|
* make sure the path still points to our leaf
|
||||||
* for possible call to del_ptr below
|
* for possible call to del_ptr below
|
||||||
|
|
Loading…
Reference in New Issue