|
@@ -3120,14 +3120,13 @@ int btrfs_balance(struct btrfs_balance_control *bctl,
|
|
|
allowed = BTRFS_AVAIL_ALLOC_BIT_SINGLE;
|
|
|
if (num_devices == 1)
|
|
|
allowed |= BTRFS_BLOCK_GROUP_DUP;
|
|
|
- else if (num_devices < 4)
|
|
|
+ else if (num_devices > 1)
|
|
|
allowed |= (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID1);
|
|
|
- else
|
|
|
- allowed |= (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID1 |
|
|
|
- BTRFS_BLOCK_GROUP_RAID10 |
|
|
|
- BTRFS_BLOCK_GROUP_RAID5 |
|
|
|
- BTRFS_BLOCK_GROUP_RAID6);
|
|
|
-
|
|
|
+ if (num_devices > 2)
|
|
|
+ allowed |= BTRFS_BLOCK_GROUP_RAID5;
|
|
|
+ if (num_devices > 3)
|
|
|
+ allowed |= (BTRFS_BLOCK_GROUP_RAID10 |
|
|
|
+ BTRFS_BLOCK_GROUP_RAID6);
|
|
|
if ((bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) &&
|
|
|
(!alloc_profile_is_valid(bctl->data.target, 1) ||
|
|
|
(bctl->data.target & ~allowed))) {
|