The Samba-Bugzilla – Attachment 16736 Details for
Bug 14795
copy_file_range() may fail with EOPNOTSUPP
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for 4.15 cherry-picked from master
bug14795-v415.patch (text/plain), 3.92 KB, created by
Ralph Böhme
on 2021-08-13 14:09:00 UTC
(
hide
)
Description:
Patch for 4.15 cherry-picked from master
Filename:
MIME Type:
Creator:
Ralph Böhme
Created:
2021-08-13 14:09:00 UTC
Size:
3.92 KB
patch
obsolete
>From 5e85aa0a8ed3f5b00f5972d97977b48756cac1e5 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Thu, 12 Aug 2021 18:23:21 +0200 >Subject: [PATCH 1/2] vfs_default: detect EOPNOTSUPP and ENOSYS errors from > copy_file_range() > >When building in a RHEL 7 container on a RHEL 8 host, the current configure >check will detect a working SYS_copy_file_range() syscall. > >Later when the resulting smbd binary is run in a RHEL 7 container on a RHEL >7 (vs 8 on the build host) host, SYS_copy_file_range() will fail with >EOPNOTSUPP. > >Since the kernel support for copy_file_range() included a fallback in case >filesystems didn't implement it, the caching of copy_file_range() support can be >made a global via the static try_copy_file_range bool, there's no need to deal >with per-fileystem behaviour differences. For the curious: SYS_copy_file_range() >appeared in Linux 4.5, fallback code being vfs_copy_file_range() -> >do_splice_direct(). > >On current kernels the fallback function is generic_copy_file_range() (which >still calls do_splice_direct()) called from the filesystem backends directly or >from vfs_copy_file_range() -> do_copy_file_range(). > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14795 > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Stefan Metzmacher <metze@samba.org> >(cherry picked from commit c25f72f401842a18cab1db2bab89deec78274d93) >--- > source3/modules/vfs_default.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > >diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c >index aa7dfe3192f..5701e37d5ec 100644 >--- a/source3/modules/vfs_default.c >+++ b/source3/modules/vfs_default.c >@@ -2214,10 +2214,11 @@ static NTSTATUS vfswrap_offload_copy_file_range(struct tevent_req *req) > NTSTATUS status; > bool same_file; > bool ok; >+ static bool try_copy_file_range = true; > >-#ifndef USE_COPY_FILE_RANGE >- return NT_STATUS_MORE_PROCESSING_REQUIRED; >-#endif >+ if (!try_copy_file_range) { >+ return NT_STATUS_MORE_PROCESSING_REQUIRED; >+ } > > same_file = file_id_equal(&state->src_fsp->file_id, > &state->dst_fsp->file_id); >@@ -2286,6 +2287,11 @@ static NTSTATUS vfswrap_offload_copy_file_range(struct tevent_req *req) > (intmax_t)state->remaining, > strerror(errno)); > switch (errno) { >+ case EOPNOTSUPP: >+ case ENOSYS: >+ try_copy_file_range = false; >+ status = NT_STATUS_MORE_PROCESSING_REQUIRED; >+ break; > case EXDEV: > status = NT_STATUS_MORE_PROCESSING_REQUIRED; > break; >-- >2.31.1 > > >From ae732183746fb31dcd5e85598134053ce55ce436 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Thu, 12 Aug 2021 18:31:40 +0200 >Subject: [PATCH 2/2] libreplace: remove now unused USE_COPY_FILE_RANGE define >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >The only user was removed in the previous commit. We still need the preceeding >checks however, based on that replace.c provides a copy_file_range() fallback. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14795 >RN: copy_file_range() may fail with EOPNOTSUPP > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Stefan Metzmacher <metze@samba.org> > >Autobuild-User(master): Ralph Böhme <slow@samba.org> >Autobuild-Date(master): Fri Aug 13 11:45:17 UTC 2021 on sn-devel-184 > >(cherry picked from commit 1641e6c528e027dbfff96a834b94a8654a03a168) >--- > lib/replace/wscript | 2 -- > 1 file changed, 2 deletions(-) > >diff --git a/lib/replace/wscript b/lib/replace/wscript >index 12f995f3198..782ac5bd550 100644 >--- a/lib/replace/wscript >+++ b/lib/replace/wscript >@@ -462,8 +462,6 @@ syscall(SYS_copy_file_range,0,NULL,0,NULL,0,0); > ''', > 'HAVE_SYSCALL_COPY_FILE_RANGE', > msg='Checking whether we have copy_file_range system call') >- if conf.CONFIG_SET('HAVE_COPY_FILE_RANGE') or conf.CONFIG_SET('HAVE_SYSCALL_COPY_FILE_RANGE'): >- conf.DEFINE('USE_COPY_FILE_RANGE', 1) > > conf.SET_TARGET_TYPE('attr', 'EMPTY') > >-- >2.31.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
metze
:
review+
Actions:
View
Attachments on
bug 14795
: 16736