• Boris Burkov's avatar
    btrfs: fix spurious free_space_tree remount warning · c55a4319
    Boris Burkov authored
    The intended logic of the check is to catch cases where the desired
    free_space_tree setting doesn't match the mounted setting, and the
    remount is anything but ro->rw. However, it makes the mistake of
    checking equality on a masked integer (btrfs_test_opt) against a boolean
    (btrfs_fs_compat_ro).
    
    If you run the reproducer:
      $ mount -o space_cache=v2 dev mnt
      $ mount -o remount,ro mnt
    
    you would expect no warning, because the remount is not attempting to
    change the free space tree setting, but we do see the warning.
    
    To fix this, add explicit bool type casts to the condition.
    
    I tested a variety of transitions:
    sudo mount -o space_cache=v2 /dev/vg0/lv0 mnt/lol
    (fst enabled)
    mount -o remount,ro mnt/lol
    (no warning, no fst change)
    sudo mount -o remount,rw,space_cache=v1,clear_cache
    (no warning, ro->rw)
    sudo mount -o remount,rw,space_cache=v2 mnt
    (warning, rw->rw with change)
    sudo mount -o remount,ro mnt
    (no warning, no fst change)
    sudo mount -o remount,rw,space_cache=v2 mnt
    (no warning, no fst change)
    Reported-by: default avatarChris Murphy <lists@colorremedies.com>
    CC: stable@vger.kernel.org # 5.11
    Signed-off-by: default avatarBoris Burkov <boris@bur.io>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    c55a4319
super.c 72.3 KB