vfs: allow copy_file_range to copy across devices
authorAmir Goldstein <amir73il@gmail.com>
Wed, 5 Jun 2019 15:04:50 +0000 (08:04 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Sun, 9 Jun 2019 17:06:20 +0000 (10:06 -0700)
commit5dae222a5ff0c269730393018a5539cc970a4726
treee1e4e1634de00d8fb7668f575d7e25acace6518f
parent8c3f406c097b83846c7d18438a905b49d17ae528
vfs: allow copy_file_range to copy across devices

We want to enable cross-filesystem copy_file_range functionality
where possible, so push the "same superblock only" checks down to
the individual filesystem callouts so they can make their own
decisions about cross-superblock copy offload and fallack to
generic_copy_file_range() for cross-superblock copy.

[Amir] We do not call ->remap_file_range() in case the files are not
on the same sb and do not call ->copy_file_range() in case the files
do not belong to the same filesystem driver.

This changes behavior of the copy_file_range(2) syscall, which will
now allow cross filesystem in-kernel copy.  CIFS already supports
cross-superblock copy, between two shares to the same server. This
functionality will now be available via the copy_file_range(2) syscall.

Cc: Steve French <stfrench@microsoft.com>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/ceph/file.c
fs/cifs/cifsfs.c
fs/fuse/file.c
fs/nfs/nfs4file.c
fs/read_write.c