• Qu Wenruo's avatar
    btrfs: force v2 space cache usage for subpage mount · 9f73f1ae
    Qu Wenruo authored
    [BUG]
    For a 4K sector sized btrfs with v1 cache enabled and only mounted on
    systems with 4K page size, if it's mounted on subpage (64K page size)
    systems, it can cause the following warning on v1 space cache:
    
     BTRFS error (device dm-1): csum mismatch on free space cache
     BTRFS warning (device dm-1): failed to load free space cache for block group 84082688, rebuilding it now
    
    Although not a big deal, as kernel can rebuild it without problem, such
    warning will bother end users, especially if they want to switch the
    same btrfs seamlessly between different page sized systems.
    
    [CAUSE]
    V1 free space cache is still using fixed PAGE_SIZE for various bitmap,
    like BITS_PER_BITMAP.
    
    Such hard-coded PAGE_SIZE usage will cause various mismatch, from v1
    cache size to checksum.
    
    Thus kernel will always reject v1 cache with a different PAGE_SIZE with
    csum mismatch.
    
    [FIX]
    Although we should fix v1 cache, it's already going to be marked
    deprecated soon.
    
    And we have v2 cache based on metadata (which is already fully subpage
    compatible), and it has almost everything superior than v1 cache.
    
    So just force subpage mount to use v2 cache on mount.
    Reported-by: default avatarMatt Corallo <blnxfsl@bluematt.me>
    CC: stable@vger.kernel.org # 5.15+
    Link: https://lore.kernel.org/linux-btrfs/61aa27d1-30fc-c1a9-f0f4-9df544395ec3@bluematt.me/Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    9f73f1ae
disk-io.c 147 KB