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

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

Btrfs: remove BUG() in raid56



This BUG() has been triggered by a fuzz testing image, which contains
an invalid chunk type, ie. a single stripe chunk has the raid6 type.

Btrfs can handle this gracefully by returning -EIO, so besides using
btrfs_warn to give us more debugging information rather than a single
BUG(), we can return error properly.

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 afce772e
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -2143,7 +2143,10 @@ int raid56_parity_recover(struct btrfs_root *root, struct bio *bio,


	rbio->faila = find_logical_bio_stripe(rbio, bio);
	rbio->faila = find_logical_bio_stripe(rbio, bio);
	if (rbio->faila == -1) {
	if (rbio->faila == -1) {
		BUG();
		btrfs_warn(root->fs_info,
	"%s could not find the bad stripe in raid56 so that we cannot recover any more (bio has logical %llu len %llu, bbio has map_type %llu)",
			   __func__, (u64)bio->bi_iter.bi_sector << 9,
			   (u64)bio->bi_iter.bi_size, bbio->map_type);
		if (generic_io)
		if (generic_io)
			btrfs_put_bbio(bbio);
			btrfs_put_bbio(bbio);
		kfree(rbio);
		kfree(rbio);