From 5da2c626a53bb3d4cfcdf773d94a153d8408d45b Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Tue, 4 Oct 2016 11:57:38 -0300 Subject: Consolidate Linux sync_file_range implementations This patch consolidates all the sync_file_range implementation for Linux in only one (sysdeps/unix/sysv/linux/sync_file_range.c). It also removes the syscall from the auto-generation using assembly macros (except for x86_64 due x32 [1]). For current minimum supported kernel (2.6.32 for x86_64 and 3.2 for all other architectures) either sync_file_range or sync_file_range2 is supported and it is expected that any future Linux ABI will provide either of one syscall. So the code path that returns ENOSYS in the case of missing syscall is removed. Checked on x86_64, i386, powerpc64le, aarch64, and armhf. * sysdeps/unix/sysv/linux/Makefile (tests): Add tst-sync_file_range. * sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c: Remove file. * sysdeps/sysv/linux/powerpc/powerpc64/sync_file_range.c: Likewise. * sysdeps/unix/sysv/linux/sync_file_range.c: New file. * sysdeps/unix/sysv/linux/tst-sync_file_range.c (sync_file_range): Consolidate all Linux implementations. [1] https://patchwork.ozlabs.org/patch/659794/ --- sysdeps/unix/sysv/linux/sync_file_range.c | 35 +++++++------------------------ 1 file changed, 8 insertions(+), 27 deletions(-) (limited to 'sysdeps/unix/sysv/linux/sync_file_range.c') diff --git a/sysdeps/unix/sysv/linux/sync_file_range.c b/sysdeps/unix/sysv/linux/sync_file_range.c index a8f42146a7..89f21e6009 100644 --- a/sysdeps/unix/sysv/linux/sync_file_range.c +++ b/sysdeps/unix/sysv/linux/sync_file_range.c @@ -16,37 +16,18 @@ License along with the GNU C Library; if not, see . */ -#include #include -#include - #include -#include - -#ifdef __NR_sync_file_range int -sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) +sync_file_range (int fd, __off64_t offset, __off64_t len, unsigned int flags) { +#if defined (__NR_sync_file_range2) + return SYSCALL_CANCEL (sync_file_range2, fd, flags, SYSCALL_LL64 (offset), + SYSCALL_LL64 (len)); +#elif defined (__NR_sync_file_range) return SYSCALL_CANCEL (sync_file_range, fd, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to), - flags); -} -#elif defined __NR_sync_file_range2 -int -sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) -{ - return SYSCALL_CANCEL (sync_file_range2, fd, flags, - __LONG_LONG_PAIR ((long) (from >> 32), (long) from), - __LONG_LONG_PAIR ((long) (to >> 32), (long) to)); -} -#else -int -sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags) -{ - __set_errno (ENOSYS); - return -1; -} -stub_warning (sync_file_range) + __ALIGNMENT_ARG SYSCALL_LL64 (offset), + SYSCALL_LL64 (len), flags); #endif +} -- cgit v1.2.3-70-g09d2