xfs: introduce new file range exchange ioctl
authorDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 21:54:14 +0000 (14:54 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 21:54:14 +0000 (14:54 -0700)
commit9a64d9b3109d01cca0b83c1d36538b7a37c5284e
treec33eacfdac02eb3c34365fa448aaf7b2fab437fe
parent5b9932f6001c70b984e8c9c2fe09e443beb4baba
xfs: introduce new file range exchange ioctl

Introduce a new ioctl to handle exchanging ranges of bytes
between files.  The goal here is to perform the exchange atomically with
respect to applications -- either they see the file contents before the
exchange or they see that A-B is now B-A, even if the kernel crashes.

My original goal with all this code was to make it so that online repair
can build a replacement directory or xattr structure in a temporary file
and commit the repair by atomically exchanging all the data blocks
between the two files.  However, I needed a way to test this mechanism
thoroughly, so I've been evolving an ioctl interface since then.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/Makefile
fs/xfs/libxfs/xfs_fs.h
fs/xfs/xfs_exchrange.c [new file with mode: 0644]
fs/xfs/xfs_exchrange.h [new file with mode: 0644]
fs/xfs/xfs_ioctl.c