diff options
author | Florian Weimer <fweimer@redhat.com> | 2015-04-24 13:50:18 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2015-05-05 08:28:35 +0200 |
commit | d0ccd0d977df62f0fe0f6c91237613b95f5d5a5f (patch) | |
tree | 61b625b7a4b8e040654762c661cb2f59e8a70539 | |
parent | 4bd40bcf44e79e610189d4498c49bba3ecb01c42 (diff) | |
download | glibc-d0ccd0d977df62f0fe0f6c91237613b95f5d5a5f.tar.gz glibc-d0ccd0d977df62f0fe0f6c91237613b95f5d5a5f.tar.xz glibc-d0ccd0d977df62f0fe0f6c91237613b95f5d5a5f.zip |
__ASSUME_FALLOCATE is always true on 32-bit architectures
This means we can clean up the generic code a bit. The 64-bit variant still needs to support !__ASSUME_FALLOCATE for alpha.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c | 32 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c | 33 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/posix_fallocate.c | 38 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/posix_fallocate64.c | 43 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c | 2 |
6 files changed, 47 insertions, 114 deletions
diff --git a/ChangeLog b/ChangeLog index 4dda364057..50a8d09d65 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2015-05-05 Florian Weimer <fweimer@redhat.com> + * sysdeps/unix/sysv/linux/posix_fallocate.c (posix_fallocate): + Assume __ASSUME_FALLOCATE is always true. + * sysdeps/unix/sysv/linux/posix_fallocate64.c + (__posix_fallocate64_l64): Likweise. + * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c + (posix_fallocate): Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c + (__posix_fallocate64_l64): Likewise. + * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c + [!__ASSUME_FALLOCATE]: Add comment. + +2015-05-05 Florian Weimer <fweimer@redhat.com> + * sysdeps/unix/sysv/linux/i386/Makefile (sysdep_routines) [$(subdir) = misc]: Remove call_fallocate. (sysdep_routines) [$(subdir) = io]: Add libc-do-syscall. diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c index be08323ab0..a9c8d73f15 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c @@ -16,42 +16,22 @@ <http://www.gnu.org/licenses/>. */ #include <fcntl.h> -#include <kernel-features.h> #include <sysdep.h> #define posix_fallocate static internal_fallocate #include <sysdeps/posix/posix_fallocate.c> #undef posix_fallocate -#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate -int __have_fallocate attribute_hidden; -#endif - - /* Reserve storage for the data of the file associated with FD. */ int posix_fallocate (int fd, __off_t offset, __off_t len) { -#ifdef __NR_fallocate -# ifndef __ASSUME_FALLOCATE - if (__builtin_expect (__have_fallocate >= 0, 1)) -# endif - { - INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - -# ifndef __ASSUME_FALLOCATE - if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0)) - __have_fallocate = -1; - else -# endif - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - } -#endif + 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 index 09345506cd..503e918456 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c @@ -16,7 +16,6 @@ <http://www.gnu.org/licenses/>. */ #include <fcntl.h> -#include <kernel-features.h> #include <sysdep.h> extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); @@ -24,36 +23,16 @@ extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); #include <sysdeps/posix/posix_fallocate64.c> #undef __posix_fallocate64_l64 -#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate -/* Defined in posix_fallocate.c. */ -extern int __have_fallocate attribute_hidden; -#endif - - /* Reserve storage for the data of the file associated with FD. */ int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) { -#ifdef __NR_fallocate -# ifndef __ASSUME_FALLOCATE - if (__builtin_expect (__have_fallocate >= 0, 1)) -# endif - { - INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - -# ifndef __ASSUME_FALLOCATE - if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0)) - __have_fallocate = -1; - else -# endif - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - } -#endif + 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/posix_fallocate.c b/sysdeps/unix/sysv/linux/posix_fallocate.c index 13d4afda70..4587029eaa 100644 --- a/sysdeps/unix/sysv/linux/posix_fallocate.c +++ b/sysdeps/unix/sysv/linux/posix_fallocate.c @@ -16,44 +16,24 @@ <http://www.gnu.org/licenses/>. */ #include <fcntl.h> -#include <kernel-features.h> #include <sysdep.h> #define posix_fallocate static internal_fallocate #include <sysdeps/posix/posix_fallocate.c> #undef posix_fallocate -#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate -int __have_fallocate attribute_hidden; -#endif - - /* Reserve storage for the data of the file associated with FD. */ int posix_fallocate (int fd, __off_t offset, __off_t len) { -#ifdef __NR_fallocate -# ifndef __ASSUME_FALLOCATE - if (__glibc_likely (__have_fallocate >= 0)) -# endif - { - 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)); - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - -# ifndef __ASSUME_FALLOCATE - if (__glibc_unlikely (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS)) - __have_fallocate = -1; - else -# endif - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - } -#endif - + 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)); + + 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/posix_fallocate64.c b/sysdeps/unix/sysv/linux/posix_fallocate64.c index 9545459013..771e59cb0b 100644 --- a/sysdeps/unix/sysv/linux/posix_fallocate64.c +++ b/sysdeps/unix/sysv/linux/posix_fallocate64.c @@ -16,7 +16,6 @@ <http://www.gnu.org/licenses/>. */ #include <fcntl.h> -#include <kernel-features.h> #include <sysdep.h> extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); @@ -24,40 +23,20 @@ extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); #include <sysdeps/posix/posix_fallocate64.c> #undef __posix_fallocate64_l64 -#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate -/* Defined in posix_fallocate.c. */ -extern int __have_fallocate attribute_hidden; -#endif - - /* Reserve storage for the data of the file associated with FD. */ int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) { -#ifdef __NR_fallocate -# ifndef __ASSUME_FALLOCATE - if (__glibc_likely (__have_fallocate >= 0)) -# endif - { - 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)); - - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - -# ifndef __ASSUME_FALLOCATE - if (__glibc_unlikely (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS)) - __have_fallocate = -1; - else -# endif - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - } -#endif - + 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)); + + 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/wordsize-64/posix_fallocate.c b/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c index ecc6505014..8ae8a2927d 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c @@ -23,6 +23,8 @@ #include <sysdeps/posix/posix_fallocate.c> #undef posix_fallocate +/* The alpha architecture introduced the fallocate system call in + 2.6.33-rc1, so we still need the fallback code. */ #if !defined __ASSUME_FALLOCATE && defined __NR_fallocate static int __have_fallocate; #endif |