mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
vfs: fix copy_file_range() averts filesystem freeze protection
Commit868f9f2f8e("vfs: fix copy_file_range() regression in cross-fs copies") removed fallback to generic_copy_file_range() for cross-fs cases inside vfs_copy_file_range(). To preserve behavior of nfsd and ksmbd server-side-copy, the fallback to generic_copy_file_range() was added in nfsd and ksmbd code, but that call is missing sb_start_write(), fsnotify hooks and more. Ideally, nfsd and ksmbd would pass a flag to vfs_copy_file_range() that will take care of the fallback, but that code would be subtle and we got vfs_copy_file_range() logic wrong too many times already. Instead, add a flag to explicitly request vfs_copy_file_range() to perform only generic_copy_file_range() and let nfsd and ksmbd use this flag only in the fallback path. This choise keeps the logic changes to minimum in the non-nfsd/ksmbd code paths to reduce the risk of further regressions. Fixes:868f9f2f8e("vfs: fix copy_file_range() regression in cross-fs copies") Tested-by: Namjae Jeon <linkinjeon@kernel.org> Tested-by: Luis Henriques <lhenriques@suse.de> Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -2089,6 +2089,14 @@ struct dir_context {
|
||||
*/
|
||||
#define REMAP_FILE_ADVISORY (REMAP_FILE_CAN_SHORTEN)
|
||||
|
||||
/*
|
||||
* These flags control the behavior of vfs_copy_file_range().
|
||||
* They are not available to the user via syscall.
|
||||
*
|
||||
* COPY_FILE_SPLICE: call splice direct instead of fs clone/copy ops
|
||||
*/
|
||||
#define COPY_FILE_SPLICE (1 << 0)
|
||||
|
||||
struct iov_iter;
|
||||
struct io_uring_cmd;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user