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

Commit 8461a3de authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason
Browse files

Btrfs: fix merge delalloc logic



My patch to properly count outstanding extents wrt MAX_EXTENT_SIZE introduced a
regression when re-dirtying already dirty areas.  We have logic in split to make
sure we are taking the largest space into account but didn't have it for merge,
so it was sometimes making us think we were turning a tiny extent into a huge
extent, when in reality we already had a huge extent and needed to use the other
side in our logic.  This fixes the regression that was reported by a user on
list.  Thanks,

Reported-by: default avatarMarkus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent 48da5f0a
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1592,7 +1592,12 @@ static void btrfs_merge_extent_hook(struct inode *inode,
		return;

	old_size = other->end - other->start + 1;
	new_size = old_size + (new->end - new->start + 1);
	if (old_size < (new->end - new->start + 1))
		old_size = (new->end - new->start + 1);
	if (new->start > other->start)
		new_size = new->end - other->start + 1;
	else
		new_size = other->end - new->start + 1;

	/* we're not bigger than the max, unreserve the space and go */
	if (new_size <= BTRFS_MAX_EXTENT_SIZE) {