Message ID | 1475021701-22246-2-git-send-email-adhemerval.zanella@linaro.com |
---|---|
State | New |
Headers | show |
On Wednesday 28 September 2016 05:45 AM, Adhemerval Zanella wrote: > From: Adhemerval Zanella <adhemerval.zanella@linaro.org> > > Changes from previous version: > > - Add back x32 use of syscalls.list until x32 {INTERNAL,INLINE}_SYSCALL > is not yet fixed [1]. > - Added a __libc_pwrite64 alias to pread64 for x86_64 (since now > posix_fallocate64 will be use and it will call __libc_pread64). > > -- > > This patch consolidates all the posix_fallocate{64} implementation for Linux > in only one (sysdeps/unix/sysv/linux/posix_fallocate{64}.c). It also removes > the syscall from the auto-generation using assembly macros. > > The macro SYSCALL_LL{64} is used to handle the offset argument along with > the new INTERNAL_SYSCALL_CALL macro to define correct argument count for > internal INTERNAL_SYSCALL call. > > Tested on x86_64, i686, x32, aarch64, ppc64le, and armhf. > > * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c: Remove > file. > * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c: > Likewise. > * sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c: Likewise. > * sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c: > Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c: Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c: Likewise. > * sysdeps/unix/sysv/linux/posix_fallocate.c (posix_fallocate): Use > SYSCALL_LL to pass both offset and len arguments. > * sysdeps/unix/sysv/linux/posix_fallocate64.c (posix_fallocate64): > Likewise. > > [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00443.html > > --- > ChangeLog | 21 ++++ > io/Makefile | 4 +- > io/tst-posix_fallocate-common.c | 92 ++++++++++++++++++ > io/tst-posix_fallocate.c | 107 ++++----------------- > io/tst-posix_fallocate64.c | 44 +++++++++ > .../sysv/linux/mips/mips64/n32/posix_fallocate.c | 37 ------- > .../sysv/linux/mips/mips64/n32/posix_fallocate64.c | 38 -------- > .../sysv/linux/mips/mips64/n64/posix_fallocate.c | 1 - > .../sysv/linux/mips/mips64/n64/posix_fallocate64.c | 1 - > sysdeps/unix/sysv/linux/posix_fallocate.c | 6 +- > sysdeps/unix/sysv/linux/posix_fallocate64.c | 8 +- > .../unix/sysv/linux/wordsize-64/posix_fallocate.c | 46 --------- > .../sysv/linux/wordsize-64/posix_fallocate64.c | 1 - > sysdeps/unix/sysv/linux/x86_64/syscalls.list | 2 +- > 14 files changed, 184 insertions(+), 224 deletions(-) > create mode 100644 io/tst-posix_fallocate-common.c > create mode 100644 io/tst-posix_fallocate64.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c > delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c > > diff --git a/io/Makefile b/io/Makefile > index f5977af..e5493b3 100644 > --- a/io/Makefile > +++ b/io/Makefile > @@ -71,8 +71,8 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ > tst-renameat tst-fchownat tst-fchmodat tst-faccessat \ > tst-symlinkat tst-linkat tst-readlinkat tst-mkdirat \ > tst-mknodat tst-mkfifoat tst-ttyname_r bug-ftw5 \ > - tst-posix_fallocate tst-fts tst-fts-lfs \ > - tst-open-tmpfile > + tst-posix_fallocate tst-posix_fallocate64 \ > + tst-fts tst-fts-lfs tst-open-tmpfile > > ifeq ($(run-built-tests),yes) > tests-special += $(objpfx)ftwtest.out > diff --git a/io/tst-posix_fallocate-common.c b/io/tst-posix_fallocate-common.c > new file mode 100644 > index 0000000..268ccce > --- /dev/null > +++ b/io/tst-posix_fallocate-common.c > @@ -0,0 +1,92 @@ > +/* Common posix_fallocate tests definitions. > + Copyright (C) 2016 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <http://www.gnu.org/licenses/>. */ > + > +#include <fcntl.h> > +#include <sys/types.h> > +#include <sys/stat.h> > +#include <unistd.h> > + > +static void do_prepare (void); > +#define PREPARE(argc, argv) do_prepare () > +static int do_test (void); > +#define TEST_FUNCTION do_test () > + > +#define TIMEOUT 20 /* sec. */ > + > +#include <test-skeleton.c> > + > +static char *temp_filename; > +static int temp_fd; > + > +static void > +do_prepare (void) > +{ > + temp_fd = create_temp_file ("tst-posix_fallocate.", &temp_filename); > + if (temp_fd == -1) > + { > + printf ("cannot create temporary file: %m\n"); > + exit (1); > + } > +} > + > +#define FAIL(str) \ > + do { printf ("error: %s (line %d)\n", str, __LINE__); return 1; } while (0) Move the definition from tst-fallocate-common.c out into test-skeleton.c and use that one instead of this. > + > +static int > +do_test_with_offset (off_t offset) > +{ > + struct stat st; > + > + if (posix_fallocate (temp_fd, offset, 768) != 0) > + FAIL ("1st posix_fallocate call failed"); > + > + if (fstat (temp_fd, &st) != 0) > + FAIL ("2nd fstat failed"); > + > + if (st.st_size != (offset + 768)) > + { > + printf ("file size after first posix_fallocate call is %llu, expected %u\n", > + (unsigned long long int) st.st_size, 512u + 768u); > + return 1; Use the new FAIL macro from tst-fallocate-common.c (or rather, in test-skeleton.c after you have moved it). > + } > + > + if (posix_fallocate (temp_fd, 0, 1024) != 0) > + FAIL ("2nd posix_fallocate call failed"); > + > + if (fstat (temp_fd, &st) != 0) > + FAIL ("3rd fstat failed"); > + > + if (st.st_size != (offset) + 768) > + FAIL ("file size changed in second posix_fallocate"); > + > + offset += 2048; > + if (posix_fallocate (temp_fd, offset, 64) != 0) > + FAIL ("3rd posix_fallocate call failed"); > + > + if (fstat (temp_fd, &st) != 0) > + FAIL ("4th fstat failed"); > + > + if (st.st_size != (offset + 64)) > + { > + printf ("file size after first posix_fallocate call is %llu, expected %u\n", > + (unsigned long long int) st.st_size, 2048u + 64u); Likewise. > + return 1; > + } > + > + return 0; > +} > diff --git a/io/tst-posix_fallocate.c b/io/tst-posix_fallocate.c > index 53f0704..59f3fa1 100644 > --- a/io/tst-posix_fallocate.c > +++ b/io/tst-posix_fallocate.c > @@ -1,100 +1,33 @@ > -#include <fcntl.h> > -#include <sys/stat.h> > +/* Basic posix_fallocate tests. > + Copyright (C) 2016 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > > -static void do_prepare (void); > -#define PREPARE(argc, argv) do_prepare () > -static int do_test (void); > -#define TEST_FUNCTION do_test () > -#include <test-skeleton.c> > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > > -static int fd; > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > > -static void > -do_prepare (void) > -{ > - fd = create_temp_file ("tst-posix_fallocate.", NULL); > - if (fd == -1) > - { > - printf ("cannot create temporary file: %m\n"); > - exit (1); > - } > -} > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <http://www.gnu.org/licenses/>. */ > > +#include "tst-posix_fallocate-common.c" > > static int > do_test (void) > { > - struct stat64 st; > + struct stat st; > > - if (fstat64 (fd, &st) != 0) > - { > - puts ("1st fstat failed"); > - return 1; > - } > + if (fstat (temp_fd, &st) != 0) > + FAIL ("1st fstat failed"); > > if (st.st_size != 0) > - { > - puts ("file not created with size 0"); > - return 1; > - } > - > - if (posix_fallocate (fd, 512, 768) != 0) > - { > - puts ("1st posix_fallocate call failed"); > - return 1; > - } > - > - if (fstat64 (fd, &st) != 0) > - { > - puts ("2nd fstat failed"); > - return 1; > - } > - > - if (st.st_size != 512 + 768) > - { > - printf ("file size after first posix_fallocate call is %llu, expected %u\n", > - (unsigned long long int) st.st_size, 512u + 768u); > - return 1; > - } > - > - if (posix_fallocate (fd, 0, 1024) != 0) > - { > - puts ("2nd posix_fallocate call failed"); > - return 1; > - } > - > - if (fstat64 (fd, &st) != 0) > - { > - puts ("3rd fstat failed"); > - return 1; > - } > - > - if (st.st_size != 512 + 768) > - { > - puts ("file size changed in second posix_fallocate"); > - return 1; > - } > - > - if (posix_fallocate (fd, 2048, 64) != 0) > - { > - puts ("3rd posix_fallocate call failed"); > - return 1; > - } > - > - if (fstat64 (fd, &st) != 0) > - { > - puts ("4th fstat failed"); > - return 1; > - } > - > - if (st.st_size != 2048 + 64) > - { > - printf ("file size after first posix_fallocate call is %llu, expected %u\n", > - (unsigned long long int) st.st_size, 2048u + 64u); > - return 1; > - } > - > - close (fd); > + FAIL ("file not created with size 0"); > > - return 0; > + return do_test_with_offset (512); > } > diff --git a/io/tst-posix_fallocate64.c b/io/tst-posix_fallocate64.c > new file mode 100644 > index 0000000..cbb57ff > --- /dev/null > +++ b/io/tst-posix_fallocate64.c > @@ -0,0 +1,44 @@ > +/* Basic posix_fallocate tests (with _FILE_OFFSET_BITS). > + Copyright (C) 2016 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <http://www.gnu.org/licenses/>. */ > + > +#define _FILE_OFFSET_BITS 64 > +#include "tst-posix_fallocate-common.c" > + > +static int > +do_test (void) > +{ > + struct stat st; > + int ret; > + > + if (fstat (temp_fd, &st) != 0) > + FAIL ("1st fstat failed"); > + > + if (st.st_size != 0) > + FAIL ("file not created with size 0"); > + > + ret = do_test_with_offset (512); > + if (ret == -1) > + return -1; do_test_with_offset returns 1, not -1. > + > + off_t base_offset = UINT32_MAX + 512LL; > + ret = do_test_with_offset (base_offset); > + if (ret == -1) > + return 1; Likewise. > + > + return 0; > +} > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c > deleted file mode 100644 > index e652e5b..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c > +++ /dev/null > @@ -1,37 +0,0 @@ > -/* Copyright (C) 2007-2016 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library. If not, see > - <http://www.gnu.org/licenses/>. */ > - > -#include <fcntl.h> > -#include <sysdep.h> > - > -#define posix_fallocate static internal_fallocate > -#include <sysdeps/posix/posix_fallocate.c> > -#undef posix_fallocate > - > -/* Reserve storage for the data of the file associated with FD. */ > -int > -posix_fallocate (int fd, __off_t offset, __off_t len) > -{ > - INTERNAL_SYSCALL_DECL (err); > - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); > - > - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) > - return 0; > - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) > - return INTERNAL_SYSCALL_ERRNO (res, err); > - return internal_fallocate (fd, offset, len); > -} > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c > deleted file mode 100644 > index d5659e0..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c > +++ /dev/null > @@ -1,38 +0,0 @@ > -/* Copyright (C) 2007-2016 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library. If not, see > - <http://www.gnu.org/licenses/>. */ > - > -#include <fcntl.h> > -#include <sysdep.h> > - > -extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); > -#define __posix_fallocate64_l64 static internal_fallocate64 > -#include <sysdeps/posix/posix_fallocate64.c> > -#undef __posix_fallocate64_l64 > - > -/* Reserve storage for the data of the file associated with FD. */ > -int > -__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) > -{ > - INTERNAL_SYSCALL_DECL (err); > - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); > - > - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) > - return 0; > - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) > - return INTERNAL_SYSCALL_ERRNO (res, err); > - return internal_fallocate64 (fd, offset, len); > -} > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c > deleted file mode 100644 > index b3fe81b..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include <sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c> > diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c > deleted file mode 100644 > index f466f13..0000000 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c > +++ /dev/null > @@ -1 +0,0 @@ > -/* posix_fallocate64 is in posix_fallocate.c */ > diff --git a/sysdeps/unix/sysv/linux/posix_fallocate.c b/sysdeps/unix/sysv/linux/posix_fallocate.c > index fc9ac37..139cb56 100644 > --- a/sysdeps/unix/sysv/linux/posix_fallocate.c > +++ b/sysdeps/unix/sysv/linux/posix_fallocate.c > @@ -27,10 +27,8 @@ int > posix_fallocate (int fd, __off_t offset, __off_t len) > { > INTERNAL_SYSCALL_DECL (err); > - int res = INTERNAL_SYSCALL (fallocate, err, 6, fd, 0, > - __LONG_LONG_PAIR (offset >> 31, offset), > - __LONG_LONG_PAIR (len >> 31, len)); > - > + int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0, > + SYSCALL_LL (offset), SYSCALL_LL (len)); > if (! INTERNAL_SYSCALL_ERROR_P (res, err)) > return 0; > if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) > diff --git a/sysdeps/unix/sysv/linux/posix_fallocate64.c b/sysdeps/unix/sysv/linux/posix_fallocate64.c > index 4a0a722..8a870cb 100644 > --- a/sysdeps/unix/sysv/linux/posix_fallocate64.c > +++ b/sysdeps/unix/sysv/linux/posix_fallocate64.c > @@ -28,12 +28,8 @@ int > __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) > { > INTERNAL_SYSCALL_DECL (err); > - int res = INTERNAL_SYSCALL (fallocate, err, 6, fd, 0, > - __LONG_LONG_PAIR ((long int) (offset >> 32), > - (long int) offset), > - __LONG_LONG_PAIR ((long int) (len >> 32), > - (long int) len)); > - > + int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0, > + SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); > if (! INTERNAL_SYSCALL_ERROR_P (res, err)) > return 0; > if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c > deleted file mode 100644 > index 8caee31..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c > +++ /dev/null > @@ -1,46 +0,0 @@ > -/* Copyright (C) 2007-2016 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, see > - <http://www.gnu.org/licenses/>. */ > - > -#include <fcntl.h> > -#include <sysdep.h> > - > -#define posix_fallocate static internal_fallocate > -#include <sysdeps/posix/posix_fallocate.c> > -#undef posix_fallocate > - > -/* Reserve storage for the data of the file associated with FD. */ > -int > -posix_fallocate (int fd, __off_t offset, __off_t len) > -{ > - INTERNAL_SYSCALL_DECL (err); > -#ifdef INTERNAL_SYSCALL_TYPES > - int res = INTERNAL_SYSCALL_TYPES (fallocate, err, 4, int, fd, > - int, 0, off_t, offset, > - off_t, len); > -#else > - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); > -#endif > - > - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) > - return 0; > - > - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) > - return INTERNAL_SYSCALL_ERRNO (res, err); > - > - return internal_fallocate (fd, offset, len); > -} > -weak_alias (posix_fallocate, posix_fallocate64) > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c > deleted file mode 100644 > index f466f13..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c > +++ /dev/null > @@ -1 +0,0 @@ > -/* posix_fallocate64 is in posix_fallocate.c */ > diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list > index bcf6370..8aed2f4 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list > +++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list > @@ -8,7 +8,7 @@ msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv > msgsnd - msgsnd Ci:ibni __msgsnd msgsnd > pread64 - pread64 Ci:ipii __libc_pread __libc_pread64 __pread64 pread64 __pread pread > preadv64 - preadv Ci:ipii preadv64 preadv > -pwrite64 - pwrite64 Ci:ipii __libc_pwrite __pwrite64 pwrite64 __pwrite pwrite > +pwrite64 - pwrite64 Ci:ipii __libc_pwrite __libc_pwrite64 __pwrite64 pwrite64 __pwrite pwrite > pwritev64 - pwritev Ci:ipii pwritev64 pwritev > shmat - shmat i:ipi __shmat shmat > shmctl - shmctl i:iip __shmctl shmctl >
On 05/10/2016 14:02, Siddhesh Poyarekar wrote: >> + >> +static void >> +do_prepare (void) >> +{ >> + temp_fd = create_temp_file ("tst-posix_fallocate.", &temp_filename); >> + if (temp_fd == -1) >> + { >> + printf ("cannot create temporary file: %m\n"); >> + exit (1); >> + } >> +} >> + >> +#define FAIL(str) \ >> + do { printf ("error: %s (line %d)\n", str, __LINE__); return 1; } while (0) > > Move the definition from tst-fallocate-common.c out into test-skeleton.c > and use that one instead of this. What about the new definition I sent with fallocate update patch: #define FAIL(...) \ ({ \ printf ("error: line %d: ", __LINE__); \ printf (__VA_ARGS__); \ printf ("\n"); \ return 1; \ }) I think I can rename to FAIL_RET to explicit state it returns and maybe add a RET_EXIT with same logic but calling exit. >> + >> +static int >> +do_test_with_offset (off_t offset) >> +{ >> + struct stat st; >> + >> + if (posix_fallocate (temp_fd, offset, 768) != 0) >> + FAIL ("1st posix_fallocate call failed"); >> + >> + if (fstat (temp_fd, &st) != 0) >> + FAIL ("2nd fstat failed"); >> + >> + if (st.st_size != (offset + 768)) >> + { >> + printf ("file size after first posix_fallocate call is %llu, expected %u\n", >> + (unsigned long long int) st.st_size, 512u + 768u); >> + return 1; > > Use the new FAIL macro from tst-fallocate-common.c (or rather, in > test-skeleton.c after you have moved it). Ack. > >> + } >> + >> + if (posix_fallocate (temp_fd, 0, 1024) != 0) >> + FAIL ("2nd posix_fallocate call failed"); >> + >> + if (fstat (temp_fd, &st) != 0) >> + FAIL ("3rd fstat failed"); >> + >> + if (st.st_size != (offset) + 768) >> + FAIL ("file size changed in second posix_fallocate"); >> + >> + offset += 2048; >> + if (posix_fallocate (temp_fd, offset, 64) != 0) >> + FAIL ("3rd posix_fallocate call failed"); >> + >> + if (fstat (temp_fd, &st) != 0) >> + FAIL ("4th fstat failed"); >> + >> + if (st.st_size != (offset + 64)) >> + { >> + printf ("file size after first posix_fallocate call is %llu, expected %u\n", >> + (unsigned long long int) st.st_size, 2048u + 64u); > > Likewise. Ack. > >> + return 1; >> + } >> + >> + return 0; >> +} >> diff --git a/io/tst-posix_fallocate.c b/io/tst-posix_fallocate.c >> index 53f0704..59f3fa1 100644 >> --- a/io/tst-posix_fallocate.c >> +++ b/io/tst-posix_fallocate.c >> @@ -1,100 +1,33 @@ >> -#include <fcntl.h> >> -#include <sys/stat.h> >> +/* Basic posix_fallocate tests. >> + Copyright (C) 2016 Free Software Foundation, Inc. >> + This file is part of the GNU C Library. >> >> -static void do_prepare (void); >> -#define PREPARE(argc, argv) do_prepare () >> -static int do_test (void); >> -#define TEST_FUNCTION do_test () >> -#include <test-skeleton.c> >> + The GNU C Library is free software; you can redistribute it and/or >> + modify it under the terms of the GNU Lesser General Public >> + License as published by the Free Software Foundation; either >> + version 2.1 of the License, or (at your option) any later version. >> >> -static int fd; >> + The GNU C Library is distributed in the hope that it will be useful, >> + but WITHOUT ANY WARRANTY; without even the implied warranty of >> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + Lesser General Public License for more details. >> >> -static void >> -do_prepare (void) >> -{ >> - fd = create_temp_file ("tst-posix_fallocate.", NULL); >> - if (fd == -1) >> - { >> - printf ("cannot create temporary file: %m\n"); >> - exit (1); >> - } >> -} >> + You should have received a copy of the GNU Lesser General Public >> + License along with the GNU C Library; if not, see >> + <http://www.gnu.org/licenses/>. */ >> >> +#include "tst-posix_fallocate-common.c" >> >> static int >> do_test (void) >> { >> - struct stat64 st; >> + struct stat st; >> >> - if (fstat64 (fd, &st) != 0) >> - { >> - puts ("1st fstat failed"); >> - return 1; >> - } >> + if (fstat (temp_fd, &st) != 0) >> + FAIL ("1st fstat failed"); >> >> if (st.st_size != 0) >> - { >> - puts ("file not created with size 0"); >> - return 1; >> - } >> - >> - if (posix_fallocate (fd, 512, 768) != 0) >> - { >> - puts ("1st posix_fallocate call failed"); >> - return 1; >> - } >> - >> - if (fstat64 (fd, &st) != 0) >> - { >> - puts ("2nd fstat failed"); >> - return 1; >> - } >> - >> - if (st.st_size != 512 + 768) >> - { >> - printf ("file size after first posix_fallocate call is %llu, expected %u\n", >> - (unsigned long long int) st.st_size, 512u + 768u); >> - return 1; >> - } >> - >> - if (posix_fallocate (fd, 0, 1024) != 0) >> - { >> - puts ("2nd posix_fallocate call failed"); >> - return 1; >> - } >> - >> - if (fstat64 (fd, &st) != 0) >> - { >> - puts ("3rd fstat failed"); >> - return 1; >> - } >> - >> - if (st.st_size != 512 + 768) >> - { >> - puts ("file size changed in second posix_fallocate"); >> - return 1; >> - } >> - >> - if (posix_fallocate (fd, 2048, 64) != 0) >> - { >> - puts ("3rd posix_fallocate call failed"); >> - return 1; >> - } >> - >> - if (fstat64 (fd, &st) != 0) >> - { >> - puts ("4th fstat failed"); >> - return 1; >> - } >> - >> - if (st.st_size != 2048 + 64) >> - { >> - printf ("file size after first posix_fallocate call is %llu, expected %u\n", >> - (unsigned long long int) st.st_size, 2048u + 64u); >> - return 1; >> - } >> - >> - close (fd); >> + FAIL ("file not created with size 0"); >> >> - return 0; >> + return do_test_with_offset (512); >> } >> diff --git a/io/tst-posix_fallocate64.c b/io/tst-posix_fallocate64.c >> new file mode 100644 >> index 0000000..cbb57ff >> --- /dev/null >> +++ b/io/tst-posix_fallocate64.c >> @@ -0,0 +1,44 @@ >> +/* Basic posix_fallocate tests (with _FILE_OFFSET_BITS). >> + Copyright (C) 2016 Free Software Foundation, Inc. >> + This file is part of the GNU C Library. >> + >> + The GNU C Library is free software; you can redistribute it and/or >> + modify it under the terms of the GNU Lesser General Public >> + License as published by the Free Software Foundation; either >> + version 2.1 of the License, or (at your option) any later version. >> + >> + The GNU C Library is distributed in the hope that it will be useful, >> + but WITHOUT ANY WARRANTY; without even the implied warranty of >> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + Lesser General Public License for more details. >> + >> + You should have received a copy of the GNU Lesser General Public >> + License along with the GNU C Library; if not, see >> + <http://www.gnu.org/licenses/>. */ >> + >> +#define _FILE_OFFSET_BITS 64 >> +#include "tst-posix_fallocate-common.c" >> + >> +static int >> +do_test (void) >> +{ >> + struct stat st; >> + int ret; >> + >> + if (fstat (temp_fd, &st) != 0) >> + FAIL ("1st fstat failed"); >> + >> + if (st.st_size != 0) >> + FAIL ("file not created with size 0"); >> + >> + ret = do_test_with_offset (512); >> + if (ret == -1) >> + return -1; > > do_test_with_offset returns 1, not -1. > Ack. >> + >> + off_t base_offset = UINT32_MAX + 512LL; >> + ret = do_test_with_offset (base_offset); >> + if (ret == -1) >> + return 1; > > Likewise. > Ack.
On Wednesday 05 October 2016 11:20 PM, Adhemerval Zanella wrote: > What about the new definition I sent with fallocate update patch: > > #define FAIL(...) \ > ({ \ > printf ("error: line %d: ", __LINE__); \ > printf (__VA_ARGS__); \ > printf ("\n"); \ > return 1; \ > }) > > I think I can rename to FAIL_RET to explicit state it returns and maybe > add a RET_EXIT with same logic but calling exit. Yeah, this is the one I was referring to. FAIL_RET sounds good along with a FAIL_EXIT. Siddhesh
diff --git a/io/Makefile b/io/Makefile index f5977af..e5493b3 100644 --- a/io/Makefile +++ b/io/Makefile @@ -71,8 +71,8 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ tst-renameat tst-fchownat tst-fchmodat tst-faccessat \ tst-symlinkat tst-linkat tst-readlinkat tst-mkdirat \ tst-mknodat tst-mkfifoat tst-ttyname_r bug-ftw5 \ - tst-posix_fallocate tst-fts tst-fts-lfs \ - tst-open-tmpfile + tst-posix_fallocate tst-posix_fallocate64 \ + tst-fts tst-fts-lfs tst-open-tmpfile ifeq ($(run-built-tests),yes) tests-special += $(objpfx)ftwtest.out diff --git a/io/tst-posix_fallocate-common.c b/io/tst-posix_fallocate-common.c new file mode 100644 index 0000000..268ccce --- /dev/null +++ b/io/tst-posix_fallocate-common.c @@ -0,0 +1,92 @@ +/* Common posix_fallocate tests definitions. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +static void do_prepare (void); +#define PREPARE(argc, argv) do_prepare () +static int do_test (void); +#define TEST_FUNCTION do_test () + +#define TIMEOUT 20 /* sec. */ + +#include <test-skeleton.c> + +static char *temp_filename; +static int temp_fd; + +static void +do_prepare (void) +{ + temp_fd = create_temp_file ("tst-posix_fallocate.", &temp_filename); + if (temp_fd == -1) + { + printf ("cannot create temporary file: %m\n"); + exit (1); + } +} + +#define FAIL(str) \ + do { printf ("error: %s (line %d)\n", str, __LINE__); return 1; } while (0) + +static int +do_test_with_offset (off_t offset) +{ + struct stat st; + + if (posix_fallocate (temp_fd, offset, 768) != 0) + FAIL ("1st posix_fallocate call failed"); + + if (fstat (temp_fd, &st) != 0) + FAIL ("2nd fstat failed"); + + if (st.st_size != (offset + 768)) + { + printf ("file size after first posix_fallocate call is %llu, expected %u\n", + (unsigned long long int) st.st_size, 512u + 768u); + return 1; + } + + if (posix_fallocate (temp_fd, 0, 1024) != 0) + FAIL ("2nd posix_fallocate call failed"); + + if (fstat (temp_fd, &st) != 0) + FAIL ("3rd fstat failed"); + + if (st.st_size != (offset) + 768) + FAIL ("file size changed in second posix_fallocate"); + + offset += 2048; + if (posix_fallocate (temp_fd, offset, 64) != 0) + FAIL ("3rd posix_fallocate call failed"); + + if (fstat (temp_fd, &st) != 0) + FAIL ("4th fstat failed"); + + if (st.st_size != (offset + 64)) + { + printf ("file size after first posix_fallocate call is %llu, expected %u\n", + (unsigned long long int) st.st_size, 2048u + 64u); + return 1; + } + + return 0; +} diff --git a/io/tst-posix_fallocate.c b/io/tst-posix_fallocate.c index 53f0704..59f3fa1 100644 --- a/io/tst-posix_fallocate.c +++ b/io/tst-posix_fallocate.c @@ -1,100 +1,33 @@ -#include <fcntl.h> -#include <sys/stat.h> +/* Basic posix_fallocate tests. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. -static void do_prepare (void); -#define PREPARE(argc, argv) do_prepare () -static int do_test (void); -#define TEST_FUNCTION do_test () -#include <test-skeleton.c> + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -static int fd; + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. -static void -do_prepare (void) -{ - fd = create_temp_file ("tst-posix_fallocate.", NULL); - if (fd == -1) - { - printf ("cannot create temporary file: %m\n"); - exit (1); - } -} + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ +#include "tst-posix_fallocate-common.c" static int do_test (void) { - struct stat64 st; + struct stat st; - if (fstat64 (fd, &st) != 0) - { - puts ("1st fstat failed"); - return 1; - } + if (fstat (temp_fd, &st) != 0) + FAIL ("1st fstat failed"); if (st.st_size != 0) - { - puts ("file not created with size 0"); - return 1; - } - - if (posix_fallocate (fd, 512, 768) != 0) - { - puts ("1st posix_fallocate call failed"); - return 1; - } - - if (fstat64 (fd, &st) != 0) - { - puts ("2nd fstat failed"); - return 1; - } - - if (st.st_size != 512 + 768) - { - printf ("file size after first posix_fallocate call is %llu, expected %u\n", - (unsigned long long int) st.st_size, 512u + 768u); - return 1; - } - - if (posix_fallocate (fd, 0, 1024) != 0) - { - puts ("2nd posix_fallocate call failed"); - return 1; - } - - if (fstat64 (fd, &st) != 0) - { - puts ("3rd fstat failed"); - return 1; - } - - if (st.st_size != 512 + 768) - { - puts ("file size changed in second posix_fallocate"); - return 1; - } - - if (posix_fallocate (fd, 2048, 64) != 0) - { - puts ("3rd posix_fallocate call failed"); - return 1; - } - - if (fstat64 (fd, &st) != 0) - { - puts ("4th fstat failed"); - return 1; - } - - if (st.st_size != 2048 + 64) - { - printf ("file size after first posix_fallocate call is %llu, expected %u\n", - (unsigned long long int) st.st_size, 2048u + 64u); - return 1; - } - - close (fd); + FAIL ("file not created with size 0"); - return 0; + return do_test_with_offset (512); } diff --git a/io/tst-posix_fallocate64.c b/io/tst-posix_fallocate64.c new file mode 100644 index 0000000..cbb57ff --- /dev/null +++ b/io/tst-posix_fallocate64.c @@ -0,0 +1,44 @@ +/* Basic posix_fallocate tests (with _FILE_OFFSET_BITS). + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#define _FILE_OFFSET_BITS 64 +#include "tst-posix_fallocate-common.c" + +static int +do_test (void) +{ + struct stat st; + int ret; + + if (fstat (temp_fd, &st) != 0) + FAIL ("1st fstat failed"); + + if (st.st_size != 0) + FAIL ("file not created with size 0"); + + ret = do_test_with_offset (512); + if (ret == -1) + return -1; + + off_t base_offset = UINT32_MAX + 512LL; + ret = do_test_with_offset (base_offset); + if (ret == -1) + return 1; + + return 0; +} diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c deleted file mode 100644 index e652e5b..0000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2007-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fcntl.h> -#include <sysdep.h> - -#define posix_fallocate static internal_fallocate -#include <sysdeps/posix/posix_fallocate.c> -#undef posix_fallocate - -/* Reserve storage for the data of the file associated with FD. */ -int -posix_fallocate (int fd, __off_t offset, __off_t len) -{ - INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - return internal_fallocate (fd, offset, len); -} diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c deleted file mode 100644 index d5659e0..0000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2007-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fcntl.h> -#include <sysdep.h> - -extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); -#define __posix_fallocate64_l64 static internal_fallocate64 -#include <sysdeps/posix/posix_fallocate64.c> -#undef __posix_fallocate64_l64 - -/* Reserve storage for the data of the file associated with FD. */ -int -__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) -{ - INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - return internal_fallocate64 (fd, offset, len); -} diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c deleted file mode 100644 index b3fe81b..0000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c deleted file mode 100644 index f466f13..0000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c +++ /dev/null @@ -1 +0,0 @@ -/* posix_fallocate64 is in posix_fallocate.c */ diff --git a/sysdeps/unix/sysv/linux/posix_fallocate.c b/sysdeps/unix/sysv/linux/posix_fallocate.c index fc9ac37..139cb56 100644 --- a/sysdeps/unix/sysv/linux/posix_fallocate.c +++ b/sysdeps/unix/sysv/linux/posix_fallocate.c @@ -27,10 +27,8 @@ int posix_fallocate (int fd, __off_t offset, __off_t len) { INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (fallocate, err, 6, fd, 0, - __LONG_LONG_PAIR (offset >> 31, offset), - __LONG_LONG_PAIR (len >> 31, len)); - + int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0, + SYSCALL_LL (offset), SYSCALL_LL (len)); if (! INTERNAL_SYSCALL_ERROR_P (res, err)) return 0; if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) diff --git a/sysdeps/unix/sysv/linux/posix_fallocate64.c b/sysdeps/unix/sysv/linux/posix_fallocate64.c index 4a0a722..8a870cb 100644 --- a/sysdeps/unix/sysv/linux/posix_fallocate64.c +++ b/sysdeps/unix/sysv/linux/posix_fallocate64.c @@ -28,12 +28,8 @@ int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) { INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (fallocate, err, 6, fd, 0, - __LONG_LONG_PAIR ((long int) (offset >> 32), - (long int) offset), - __LONG_LONG_PAIR ((long int) (len >> 32), - (long int) len)); - + int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0, + SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); if (! INTERNAL_SYSCALL_ERROR_P (res, err)) return 0; if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c deleted file mode 100644 index 8caee31..0000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2007-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <fcntl.h> -#include <sysdep.h> - -#define posix_fallocate static internal_fallocate -#include <sysdeps/posix/posix_fallocate.c> -#undef posix_fallocate - -/* Reserve storage for the data of the file associated with FD. */ -int -posix_fallocate (int fd, __off_t offset, __off_t len) -{ - INTERNAL_SYSCALL_DECL (err); -#ifdef INTERNAL_SYSCALL_TYPES - int res = INTERNAL_SYSCALL_TYPES (fallocate, err, 4, int, fd, - int, 0, off_t, offset, - off_t, len); -#else - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); -#endif - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - - return internal_fallocate (fd, offset, len); -} -weak_alias (posix_fallocate, posix_fallocate64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c deleted file mode 100644 index f466f13..0000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c +++ /dev/null @@ -1 +0,0 @@ -/* posix_fallocate64 is in posix_fallocate.c */ diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list index bcf6370..8aed2f4 100644 --- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list +++ b/sysdeps/unix/sysv/linux/x86_64/syscalls.list @@ -8,7 +8,7 @@ msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv msgsnd - msgsnd Ci:ibni __msgsnd msgsnd pread64 - pread64 Ci:ipii __libc_pread __libc_pread64 __pread64 pread64 __pread pread preadv64 - preadv Ci:ipii preadv64 preadv -pwrite64 - pwrite64 Ci:ipii __libc_pwrite __pwrite64 pwrite64 __pwrite pwrite +pwrite64 - pwrite64 Ci:ipii __libc_pwrite __libc_pwrite64 __pwrite64 pwrite64 __pwrite pwrite pwritev64 - pwritev Ci:ipii pwritev64 pwritev shmat - shmat i:ipi __shmat shmat shmctl - shmctl i:iip __shmctl shmctl
From: Adhemerval Zanella <adhemerval.zanella@linaro.org> Changes from previous version: - Add back x32 use of syscalls.list until x32 {INTERNAL,INLINE}_SYSCALL is not yet fixed [1]. - Added a __libc_pwrite64 alias to pread64 for x86_64 (since now posix_fallocate64 will be use and it will call __libc_pread64). -- This patch consolidates all the posix_fallocate{64} implementation for Linux in only one (sysdeps/unix/sysv/linux/posix_fallocate{64}.c). It also removes the syscall from the auto-generation using assembly macros. The macro SYSCALL_LL{64} is used to handle the offset argument along with the new INTERNAL_SYSCALL_CALL macro to define correct argument count for internal INTERNAL_SYSCALL call. Tested on x86_64, i686, x32, aarch64, ppc64le, and armhf. * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c: Remove file. * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c: Likewise. * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c: Likewise. * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c: Likewise. * sysdeps/unix/sysv/linux/posix_fallocate.c (posix_fallocate): Use SYSCALL_LL to pass both offset and len arguments. * sysdeps/unix/sysv/linux/posix_fallocate64.c (posix_fallocate64): Likewise. [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00443.html --- ChangeLog | 21 ++++ io/Makefile | 4 +- io/tst-posix_fallocate-common.c | 92 ++++++++++++++++++ io/tst-posix_fallocate.c | 107 ++++----------------- io/tst-posix_fallocate64.c | 44 +++++++++ .../sysv/linux/mips/mips64/n32/posix_fallocate.c | 37 ------- .../sysv/linux/mips/mips64/n32/posix_fallocate64.c | 38 -------- .../sysv/linux/mips/mips64/n64/posix_fallocate.c | 1 - .../sysv/linux/mips/mips64/n64/posix_fallocate64.c | 1 - sysdeps/unix/sysv/linux/posix_fallocate.c | 6 +- sysdeps/unix/sysv/linux/posix_fallocate64.c | 8 +- .../unix/sysv/linux/wordsize-64/posix_fallocate.c | 46 --------- .../sysv/linux/wordsize-64/posix_fallocate64.c | 1 - sysdeps/unix/sysv/linux/x86_64/syscalls.list | 2 +- 14 files changed, 184 insertions(+), 224 deletions(-) create mode 100644 io/tst-posix_fallocate-common.c create mode 100644 io/tst-posix_fallocate64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c