On Tue, Sep 13, 2016 at 10:26 AM, Amir Goldstein <amir73il@xxxxxxxxx> wrote: > On Tue, Sep 13, 2016 at 3:11 AM, Dave Chinner <david@xxxxxxxxxxxxx> wrote: >> On Mon, Sep 12, 2016 at 06:06:43PM +0300, Amir Goldstein wrote: >>> Use vfs_copy_file_range() helper instead of calling do_splice_direct() >>> when copying up file data. >>> When copying up within the same fs, which supports copy_file_range(), >>> fs implementation can be more efficient then do_splice_direct(). >>> vfs_copy_file_range() helper falls back to do_splice_direct() if >>> it cannot use the file system's copy_file_range() implementation. >>> >>> Tested correct behavior when lower and upper are on: >>> 1. same ext4 (copy) >>> 2. same xfs + reflink patches + mkfs.xfs (copy) >>> 3. same xfs + reflink patches + mkfs.xfs -m reflink=1 (clone) >>> 4. different xfs + reflink patches + mkfs.xfs -m reflink=1 (copy) >>> >>> For comparison, on my laptop, xfstest overlay/001 (copy up of large >>> sparse files) takes less than 1 second in the xfs reflink setup vs. >>> 25 seconds on the rest of the setups. >> >> This is now stale, right? the reflink is done from the >> vfs_clone_file_range() call added in an earlier patch, not this >> change.... > > Well.. that depends on the definition of "now" > as patch 4/4 you are correct, but as I wrote in the cover letter > I tested patches 3,4 independently of patches 1,2 > otherwise, patches 3,4 would be adding moot code > or rather a simple re-factoring. > > So now it boils down to a process question: > should patches 3,4 be merged, even though no one can properly test the > 'fallback to chunk copy range' case > with any of the in-tree filesystems (without modifying them first)? > > I could be presenting patch 4 as a simple re-factoring > (use vfs copy range helper instead of using do_splice_direct) > which makes for a cleaner code. > But the fact that it changes behavior in a subtle way > (hopefully for the best) without anyone noticing this change far into > the future is somewhat troubling. > > Your thoughts? > Anyway, I added a comment in commit message about how I tested this change (by removing the vfs_clone_file_range() call). resending... >> >>> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> >>> --- >>> fs/overlayfs/copy_up.c | 9 +++++---- >>> 1 file changed, 5 insertions(+), 4 deletions(-) >>> >>> diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c >>> index e432d7e..32ea54f 100644 >>> --- a/fs/overlayfs/copy_up.c >>> +++ b/fs/overlayfs/copy_up.c >>> @@ -159,15 +159,16 @@ static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) >>> break; >>> } >>> >>> - bytes = do_splice_direct(old_file, &old_pos, >>> - new_file, &new_pos, >>> - this_len, SPLICE_F_MOVE); >>> + bytes = vfs_copy_file_range(old_file, old_pos, >>> + new_file, new_pos, >>> + this_len, 0); >>> if (bytes <= 0) { >>> error = bytes; >>> break; >>> } >>> - WARN_ON(old_pos != new_pos); >>> >>> + old_pos += bytes; >>> + new_pos += bytes; >>> len -= bytes; >>> } >> >> Patch does not remove the >> >> /* FIXME: copy up sparse files efficiently */ >> >> comment. Efficient copying of sparse files is something >> vfs_copy_file_range() should do internally.... > > Moved the comment into vfs_copy_file_range() > > Cheers, > Amir. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html