diff mbox series

vfs: allow remap flags to be passed to vfs_clone_file_range

Message ID 20181130204238.GE8131@magnolia (mailing list archive)
State New, archived
Headers show
Series vfs: allow remap flags to be passed to vfs_clone_file_range | expand

Commit Message

Darrick J. Wong Nov. 30, 2018, 8:42 p.m. UTC
From: Darrick J. Wong <darrick.wong@oracle.com>

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, which isn't an issue.
Remove the WARN_ON because it's unnecessary.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 fs/read_write.c |    2 --
 1 file changed, 2 deletions(-)

Comments

Amir Goldstein Dec. 1, 2018, 9:37 a.m. UTC | #1
On Fri, Nov 30, 2018 at 10:42 PM Darrick J. Wong
<darrick.wong@oracle.com> wrote:
>
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> 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, which isn't an issue.
> Remove the WARN_ON because it's unnecessary.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
>  fs/read_write.c |    2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/fs/read_write.c b/fs/read_write.c
> index 4dae0399c75a..2d9fed57e7dd 100644
> --- a/fs/read_write.c
> +++ b/fs/read_write.c
> @@ -1956,8 +1956,6 @@ 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_ADVISORY);

We still do not want anyone to call do_clone_file_range(..., REMAP_FILE_DEDUP)

If we had more users of the overloaded interface, we need to do:

WARN_ON_ONCE((remap_flags & REMAP_FILE_OP_MASK) == REMAP_FILE_OP_CLONE);

With the minor fix, you can add:
Reviewed-by: Amir Goldstein <amir73il@gmail.com>

Thanks,
Amir.
Christoph Hellwig Dec. 2, 2018, 3:59 p.m. UTC | #2
On Fri, Nov 30, 2018 at 12:42:38PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> 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, which isn't an issue.
> Remove the WARN_ON because it's unnecessary.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

This looks ok:

Reviewed-by: Christoph Hellwig <hch@lst.de>

But this also indicates that do_clone_file_range/vfs_clone_file_range
are misnamed now, as they are wrappers for the remap_file_range method.
diff mbox series

Patch

diff --git a/fs/read_write.c b/fs/read_write.c
index 4dae0399c75a..2d9fed57e7dd 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -1956,8 +1956,6 @@  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);
-
 	if (S_ISDIR(inode_in->i_mode) || S_ISDIR(inode_out->i_mode))
 		return -EISDIR;
 	if (!S_ISREG(inode_in->i_mode) || !S_ISREG(inode_out->i_mode))