Skip to content
  • Qu Wenruo's avatar
    btrfs: Fix a regression which we can't convert to SINGLE profile · fab27359
    Qu Wenruo authored
    [BUG]
    With v5.3 kernel, we can't convert to SINGLE profile:
    
      # 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 081db89b
    
     ("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: default avatarChris Murphy <lists@colorremedies.com>
    Fixes: 081db89b
    
     ("btrfs: use raid_attr to get allowed profiles for balance conversion")
    CC: stable@vger.kernel.org # 5.3+
    Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    fab27359