summaryrefslogtreecommitdiff
path: root/virt
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2023-11-30 16:16:24 +0200
committerChristian Brauner <brauner@kernel.org>2023-12-05 12:58:02 +0100
commit730651268664070dbd582d7d0338b47d066d6323 (patch)
tree4b91e63d7f64e112cc3431d0c9f1bc39bffc42eb /virt
parentda40448ce4eb4de18eb7b0db61dddece32677939 (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