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

Commit cc54ff62 authored by Liu Bo's avatar Liu Bo Committed by David Sterba
Browse files

Btrfs: do not merge rbios if their fail stripe index are not identical



Since fail stripe index in rbio would be used to decide which
algorithm reconstruction would be run, we cannot merge rbios if
their's fail striped indexes are different, otherwise, one of the two
reconstructions would fail.

Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent db34be19
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -600,6 +600,25 @@ static int rbio_can_merge(struct btrfs_raid_bio *last,
	if (last->operation == BTRFS_RBIO_REBUILD_MISSING)
		return 0;

	if (last->operation == BTRFS_RBIO_READ_REBUILD) {
		int fa = last->faila;
		int fb = last->failb;
		int cur_fa = cur->faila;
		int cur_fb = cur->failb;

		if (last->faila >= last->failb) {
			fa = last->failb;
			fb = last->faila;
		}

		if (cur->faila >= cur->failb) {
			cur_fa = cur->failb;
			cur_fb = cur->faila;
		}

		if (fa != cur_fa || fb != cur_fb)
			return 0;
	}
	return 1;
}