On Wed, Nov 27, 2019 at 06:38:46PM +0000, Trond Myklebust wrote: > Hi all > > A quick question about clone_range() and guarantees around metadata > stability. > > Are users required to call fsync/fsync_range() after calling > clone_range() in order to guarantee that the cloned range metadata is > persisted? Yes. > I'm assuming that it is required in order to guarantee that > data is persisted. Data and metadata. XFS and ocfs2's reflink implementations will flush the page cache before starting the remap, but they both require fsync to force the log/journal to disk. (AFAICT the same reasoning applies to btrfs, but don't trust my word for it.) > I'm asking because knfsd currently just does a call to > vfs_clone_file_range() when parsing a NFSv4.2 CLONE operation. It does > not call fsync()/fsync_range() on the destination file, and since the > NFSv4.2 protocol does not require you to perform any other operation in > order to persist data/metadata, I'm worried that we may be corrupting > the cloned file if the NFS server crashes at the wrong moment after the > client has been told the clone completed. That analysis seems correct. --D > Cheers > Trond > -- > Trond Myklebust > Linux NFS client maintainer, Hammerspace > trond.myklebust@xxxxxxxxxxxxxxx > >