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

Commit 88be159c authored by Austin S. Hemmelgarn's avatar Austin S. Hemmelgarn Committed by David Sterba
Browse files

btrfs: allow balancing to dup with multi-device



Currently, we don't allow the user to try and rebalance to a dup profile
on a multi-device filesystem.  In most cases, this is a perfectly sensible
restriction as raid1 uses the same amount of space and provides better
protection.

However, when reshaping a multi-device filesystem down to a single device
filesystem, this requires the user to convert metadata and system chunks
to single profile before deleting devices, and then convert again to dup,
which leaves a period of time where metadata integrity is reduced.

This patch removes the single-device-only restriction from converting to
dup profile to remove this potential data integrity reduction.

Signed-off-by: default avatarAustin S. Hemmelgarn <ahferroin7@gmail.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent cf25ce51
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -3700,10 +3700,8 @@ int btrfs_balance(struct btrfs_balance_control *bctl,
		num_devices--;
	}
	btrfs_dev_replace_unlock(&fs_info->dev_replace, 0);
	allowed = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
	if (num_devices == 1)
		allowed |= BTRFS_BLOCK_GROUP_DUP;
	else if (num_devices > 1)
	allowed = BTRFS_AVAIL_ALLOC_BIT_SINGLE | BTRFS_BLOCK_GROUP_DUP;
	if (num_devices > 1)
		allowed |= (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID1);
	if (num_devices > 2)
		allowed |= BTRFS_BLOCK_GROUP_RAID5;