btrfs: can_nocow_file_extent should pass down args->strict from callers
authorChris Mason <clm@fb.com>
Fri, 9 Jun 2023 17:53:41 +0000 (10:53 -0700)
committerDavid Sterba <dsterba@suse.com>
Mon, 12 Jun 2023 22:01:08 +0000 (00:01 +0200)
commitdeccae40e4b30f98837e44225194d80c8baf2233
tree0b6f19beb19c9a3230ec570970fb4a166df4e141
parent7833b865953c8e62abc76a3261c04132b2fb69de
btrfs: can_nocow_file_extent should pass down args->strict from callers

Commit 619104ba453ad0 ("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: 619104ba453ad0 ("btrfs: move common NOCOW checks against a file extent into a helper")
CC: stable@vger.kernel.org # 6.1+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c