On Wed, Sep 25, 2019 at 10:13:27AM +0800, Qu Wenruo wrote:
> [BUG]
> With v5.3 kernel, we just can't convert to SINGLE profile by all means:
> # btrfs balance start -f -dconvert=single $mnt
> ERROR: error during balancing '/mnt/btrfs': Invalid argument
> # dmesg -t | tail
> validate_convert_profile: data profile=0x1000000000000 allowed=0x20 is_valid=1 final=0x1000000000000 ret=1
> BTRFS error (device dm-3): balance: invalid convert data profile single
>
> [CAUSE]
> With the extra debug output added, it shows that the @allowed bit is
> lacking the special in-memory only SINGLE profile bit.
>
> Thus we fail at that (profile & ~allowed) check.
>
> This regression is caused by commit 081db89b13cb ("btrfs: use raid_attr
> to get allowed profiles for balance conversion") and the fact that we
> don't use any bit to indicate SINGLE profile on-disk, but uses special
> in-memory only bit to help distinguish different profiles.
>
> [FIX]
> Add that BTRFS_AVAIL_ALLOC_BIT_SINGLE to @allowed, so the code should be
> the same as it was and fix the regression.
>
> Reported-by: Chris Murphy <lists@xxxxxxxxxxxxxxxxx>
> Fixes: 081db89b13cb ("btrfs: use raid_attr to get allowed profiles for balance conversion")
> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
Added to misc-next, thanks.