diff options
author | Amir Goldstein <amir73il@gmail.com> | 2023-11-30 16:16:24 +0200 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2023-12-05 12:58:02 +0100 |
commit | 730651268664070dbd582d7d0338b47d066d6323 (patch) | |
tree | 4b91e63d7f64e112cc3431d0c9f1bc39bffc42eb /virt | |
parent | da40448ce4eb4de18eb7b0db61dddece32677939 (diff) |
fs: use do_splice_direct() for nfsd/ksmbd server-side-copy
nfsd/ksmbd call vfs_copy_file_range() with flag COPY_FILE_SPLICE to
perform kernel copy between two files on any two filesystems.
Splicing input file, while holding file_start_write() on the output file
which is on a different sb, posses a risk for fanotify related deadlocks.
We only need to call splice_file_range() from within the context of
->copy_file_range() filesystem methods with file_start_write() held.
To avoid the possible deadlocks, always use do_splice_direct() instead of
splice_file_range() for the kernel copy fallback in vfs_copy_file_range()
without holding file_start_write().
Reported-and-tested-by: Bert Karwatzki <spasswolf@web.de>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Link: https://lore.kernel.org/r/20231130141624.3338942-4-amir73il@gmail.com
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'virt')
0 files changed, 0 insertions, 0 deletions