On Thu, 2023-11-30 at 16:16 +0200, Amir Goldstein wrote: > Christian, > > Josef has helped me see the light and figure out how to avoid the > possible deadlock, which involves: > - splice() from source file in a loop mounted fs to dest file in > a host fs, where the loop image file is > - fsfreeze on host fs > - write to host fs in context of fanotify permission event handler > (FAN_ACCESS_PERM) on the splice source file > > The first patch should not be changing any logic. > I only build tested the ceph patch, so hoping to get an > Acked-by/Tested-by from Jeff. > Xiubo (cc'ed) is probably in a better position these days to review and get you test results with this patch. > The following patches rids us of the deadlock by not holding > file_start_write() while reading from splice source file in the > cases where source and destination can be on different arbitrary > filesystems. > > The patches apply and tested on top of vfs.rw branch. > > Thanks, > Amir. > > Changes since v1: > - Add patch to deal with nfsd/ksmbd server-side-copy > - Shorten helper name to splice_file_range() > - Added assertion for flags value in generic_copy_file_range() > - Added RVB from Jan > > Amir Goldstein (3): > fs: fork splice_file_range() from do_splice_direct() > fs: move file_start_write() into direct_splice_actor() > fs: use do_splice_direct() for nfsd/ksmbd server-side-copy > > fs/ceph/file.c | 9 +++-- > fs/overlayfs/copy_up.c | 2 - > fs/read_write.c | 42 +++++++++++--------- > fs/splice.c | 88 +++++++++++++++++++++++++++++++----------- > include/linux/fs.h | 2 - > include/linux/splice.h | 13 ++++--- > 6 files changed, 103 insertions(+), 53 deletions(-) > -- Jeff Layton <jlayton@xxxxxxxxxx>