xfs: don't call xfs_exchange_range_finish for a dry run

LOLLM noticed that we strip file privileges and whatnot even for a dry
run.  We also shouldn't flush dirty data to disk or trim COW staging
events for a dry run.  Neither of those behaviors are allowed by the
manpage, so fix that by exiting early on DRY_RUN in various functions.

Cc: stable@vger.kernel.org # v6.10
Fixes: 42672471f9 ("xfs: bind together the front and back ends of the file range exchange code")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
Darrick J. Wong 2026-09-10 22:53:55 -07:00 committed by Carlos Maiolino
parent 3083ba8dde
commit 8fc18580ec

View File

@ -633,6 +633,9 @@ xfs_exchrange_prep(
if (error)
return error;
if (fxr->flags & XFS_EXCHANGE_RANGE_DRY_RUN)
return 0;
trace_xfs_exchrange_flush(fxr, ip1, ip2);
/* Flush the relevant ranges of both files. */
@ -709,9 +712,11 @@ xfs_exchrange_contents(
* other file write would do. This may involve turning on support for
* logged xattrs if either file has security capabilities.
*/
error = xfs_exchange_range_finish(fxr);
if (error)
goto out_unlock;
if (!(fxr->flags & XFS_EXCHANGE_RANGE_DRY_RUN)) {
error = xfs_exchange_range_finish(fxr);
if (error)
goto out_unlock;
}
out_unlock:
xfs_iunlock2_io_mmap(ip1, ip2);