Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d717aa1d authored by Yan Zheng's avatar Yan Zheng Committed by Chris Mason
Browse files

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: default avatarChris Mason <chris.mason@oracle.com>
parent 0a4eefbb
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -1040,9 +1040,6 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
	    BTRFS_NODEPTRS_PER_BLOCK(root) / 4)
		return 0;

	if (btrfs_header_nritems(mid) > 2)
		return 0;

	if (btrfs_header_nritems(mid) < 2)
		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 */
		if (used < BTRFS_LEAF_DATA_SIZE(root) / 2) {
		if (used < BTRFS_LEAF_DATA_SIZE(root) / 3) {
			/* push_leaf_left fixes the path.
			 * make sure the path still points to our leaf
			 * for possible call to del_ptr below