btrfs: can_nocow_file_extent should pass down args->strict from callers
commit deccae40e4b30f98837e44225194d80c8baf2233 upstream. Commit619104ba45
("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:619104ba45
("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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4e9da0cda1
commit
9e1c7968a2
@ -1849,7 +1849,7 @@ static int can_nocow_file_extent(struct btrfs_path *path,
|
||||
|
||||
ret = btrfs_cross_ref_exist(root, btrfs_ino(inode),
|
||||
key->offset - args->extent_offset,
|
||||
args->disk_bytenr, false, path);
|
||||
args->disk_bytenr, args->strict, path);
|
||||
WARN_ON_ONCE(ret > 0 && is_freespace_inode);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
|
Loading…
Reference in New Issue
Block a user