vfs: allow some remap flags to be passed to vfs_clone_file_range
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 30 Nov 2018 20:32:38 +0000 (12:32 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 4 Dec 2018 16:50:49 +0000 (08:50 -0800)
In overlayfs, ovl_remap_file_range calls vfs_clone_file_range on the
lower filesystem's inode, passing through whatever remap flags it got
from its caller.  Since vfs_copy_file_range first tries a filesystem's
remap function with REMAP_FILE_CAN_SHORTEN, this can get passed through
to the second vfs_copy_file_range call, and this isn't an issue.
Change the WARN_ON to look only for the DEDUP flag.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/read_write.c

index 4dae0399c75a7227f8c53a5d2a06d985fa31b3a0..58f30537c47a0a9d04cdba4abbd78188379ae463 100644 (file)
@@ -1956,7 +1956,7 @@ loff_t do_clone_file_range(struct file *file_in, loff_t pos_in,
        struct inode *inode_out = file_inode(file_out);
        loff_t ret;
 
-       WARN_ON_ONCE(remap_flags);
+       WARN_ON_ONCE(remap_flags & REMAP_FILE_DEDUP);
 
        if (S_ISDIR(inode_in->i_mode) || S_ISDIR(inode_out->i_mode))
                return -EISDIR;