• Chris Mason's avatar
    btrfs: can_nocow_file_extent should pass down args->strict from callers · deccae40
    Chris Mason authored
    Commit 619104ba ("btrfs: move common NOCOW checks against a file
    extent into a helper") changed our call to btrfs_cross_ref_exist() to
    always pass false for the 'strict' parameter.  We're passing this down
    through the stack so that we can do a full check for cross references
    during swapfile activation.
    
    With strict always false, this test fails:
    
      btrfs subvol create swappy
      chattr +C swappy
      fallocate -l1G swappy/swapfile
      chmod 600 swappy/swapfile
      mkswap swappy/swapfile
    
      btrfs subvol snap swappy swapsnap
      btrfs subvol del -C swapsnap
    
      btrfs fi sync /
      sync;sync;sync
    
      swapon swappy/swapfile
    
    The fix is to just use args->strict, and everyone except swapfile
    activation is passing false.
    
    Fixes: 619104ba ("btrfs: move common NOCOW checks against a file extent into a helper")
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    deccae40
inode.c 312 KB