Re: [PATCH] Fix fallocate erroneously returning ENOSYS on Linux systems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/31/2012 09:49 PM, clinew@xxxxxxxxxxxxx wrote:
Currently, the helpers.c file provides a function defintion for Linux fallocate that sets errno to ENOSYS and returns failure; this is useful for a non-Linux
OS. However, this definition will override the Linux implementation of
fallocate when 'fallocate=keep' is set. Adding a preprocessor macro to check
if Linux fallocate is defined fixes this issue.

Signed-off-by: Wade Cline <wcline@xxxxxxxxxx>
---
 helpers.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/helpers.c b/helpers.c
index 9562567..714842e 100644
--- a/helpers.c
+++ b/helpers.c
@@ -9,11 +9,13 @@
 #include "arch/arch.h"
 #include "os/os.h"

+#ifndef FIO_HAVE_LINUX_FALLOCATE
 int _weak fallocate(int fd, int mode, off_t offset, off_t len)
 {
        errno = ENOSYS;
        return -1;
 }
+#endif

Hmm, the purpose of the _weak would be to NOT override a fallocate() if
we have one. Why isn't this working?

--
Jens Axboe

--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


I am not sure. Running 'nm' with and without the patch provides the following symbol table information:

Without patch:
W fallocate64
w posix_fallocate64@@GLIBC_2.2.5

With patch:
w fallocate64@@GLIBC_2.10
w posix_fallocate64@@GLIBC_2.2.5

My interpretation of this is that, without the patch, the weakly-linked symbol has a default definition and doesn't know to look up the correct shared-library routine, so it falls back to the default definition; this may or may not be the case. Also, it appears that using #ifndef <funciton definition> #endif has been done for a number of functions in 'helpers.c', so this may not be the only function that has experienced the same issue.

-Wade Cline
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux