aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2019-06-28 09:39:21 +0200
committerFlorian Weimer <fweimer@redhat.com>2019-06-28 09:39:21 +0200
commit5a659ccc0ec217ab02a4c273a1f6d346a359560a (patch)
treef82ef13a75f14209cbc97ecee79336d8bb4df37c /sysdeps
parent1626f499d159f17d5d99dc41497b52074f3850df (diff)
downloadglibc-5a659ccc0ec217ab02a4c273a1f6d346a359560a.zip
glibc-5a659ccc0ec217ab02a4c273a1f6d346a359560a.tar.gz
glibc-5a659ccc0ec217ab02a4c273a1f6d346a359560a.tar.bz2
io: Remove copy_file_range emulation [BZ #24744]
The kernel is evolving this interface (e.g., removal of the restriction on cross-device copies), and keeping up with that is difficult. Applications which need the function should run kernels which support the system call instead of relying on the imperfect glibc emulation. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/kernel-features.h1
-rw-r--r--sysdeps/unix/sysv/linux/arm/kernel-features.h1
-rw-r--r--sysdeps/unix/sysv/linux/copy_file_range.c21
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h4
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/kernel-features.h5
-rw-r--r--sysdeps/unix/sysv/linux/sh/kernel-features.h1
6 files changed, 5 insertions, 28 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index 4a5d029..81f6c36 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -49,7 +49,6 @@
/* Support for copy_file_range, statx was added in kernel 4.13. */
#if __LINUX_KERNEL_VERSION < 0x040D00
# undef __ASSUME_MLOCK2
-# undef __ASSUME_COPY_FILE_RANGE
# undef __ASSUME_STATX
#endif
diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
index 2d2d355..4220adf 100644
--- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
@@ -45,7 +45,6 @@
present in 32-bit kernels from 4.4 and 4.5 respectively. */
#if __LINUX_KERNEL_VERSION < 0x040700
# undef __ASSUME_MLOCK2
-# undef __ASSUME_COPY_FILE_RANGE
#endif
#undef __ASSUME_CLONE_DEFAULT
diff --git a/sysdeps/unix/sysv/linux/copy_file_range.c b/sysdeps/unix/sysv/linux/copy_file_range.c
index 7096100..e950db3 100644
--- a/sysdeps/unix/sysv/linux/copy_file_range.c
+++ b/sysdeps/unix/sysv/linux/copy_file_range.c
@@ -20,27 +20,16 @@
#include <sysdep-cancel.h>
#include <unistd.h>
-/* Include the fallback implementation. */
-#ifndef __ASSUME_COPY_FILE_RANGE
-#define COPY_FILE_RANGE_DECL static
-#define COPY_FILE_RANGE copy_file_range_compat
-#include <io/copy_file_range-compat.c>
-#endif
-
ssize_t
copy_file_range (int infd, __off64_t *pinoff,
int outfd, __off64_t *poutoff,
size_t length, unsigned int flags)
{
#ifdef __NR_copy_file_range
- ssize_t ret = SYSCALL_CANCEL (copy_file_range, infd, pinoff, outfd, poutoff,
- length, flags);
-# ifndef __ASSUME_COPY_FILE_RANGE
- if (ret == -1 && errno == ENOSYS)
- ret = copy_file_range_compat (infd, pinoff, outfd, poutoff, length, flags);
-# endif
- return ret;
-#else /* !__NR_copy_file_range */
- return copy_file_range_compat (infd, pinoff, outfd, poutoff, length, flags);
+ return SYSCALL_CANCEL (copy_file_range, infd, pinoff, outfd, poutoff,
+ length, flags);
+#else
+ __set_errno (ENOSYS);
+ return -1;
#endif
}
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index bc5c959..1518bb5 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -100,10 +100,6 @@
# define __ASSUME_MLOCK2 1
#endif
-#if __LINUX_KERNEL_VERSION >= 0x040500
-# define __ASSUME_COPY_FILE_RANGE 1
-#endif
-
/* Support for statx was added in kernel 4.11. */
#if __LINUX_KERNEL_VERSION >= 0x040B00
# define __ASSUME_STATX 1
diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
index 8df1940..a787409 100644
--- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
@@ -60,11 +60,6 @@
# undef __ASSUME_MLOCK2
#endif
-/* Support for the copy_file_range syscall was added in 4.10. */
-#if __LINUX_KERNEL_VERSION < 0x040A00
-# undef __ASSUME_COPY_FILE_RANGE
-#endif
-
/* Support for statx was added in kernel 4.12. */
#if __LINUX_KERNEL_VERSION < 0X040C00
# undef __ASSUME_STATX
diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h
index b11a5cb..0f287fb 100644
--- a/sysdeps/unix/sysv/linux/sh/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h
@@ -49,7 +49,6 @@
# undef __ASSUME_RENAMEAT2
# undef __ASSUME_EXECVEAT
# undef __ASSUME_MLOCK2
-# undef __ASSUME_COPY_FILE_RANGE
#endif
/* sh does not support the statx system call before 5.1. */