From 44f668d7ba3d82c1218951b8c9ed058bedb89e17 Mon Sep 17 00:00:00 2001 From: Sitsofe Wheeler Date: Sat, 5 Oct 2019 12:04:33 +0100 Subject: [PATCH] configure: stop enabling fdatasync on OSX Change configure compile probes to fail on implicit declarations. This (correctly) stops us from enabling fdatasync on OSX which was problematic because we were actually calling a syscall stub with arguments different to what was declared in its prototype (see https://github.com/gbrault/picoc/issues/145#issuecomment-89734655 and https://gitlab.freedesktop.org/xdg/shared-mime-info/issues/7 ). Fixes: https://github.com/axboe/fio/issues/834 ("Drop macOS support for fdatasync") Signed-off-by: Sitsofe Wheeler --- HOWTO | 2 +- configure | 4 ++-- fio.1 | 2 +- os/os-mac.h | 6 ------ 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/HOWTO b/HOWTO index 4fef1504..96a047de 100644 --- a/HOWTO +++ b/HOWTO @@ -1279,7 +1279,7 @@ I/O type .. option:: fdatasync=int Like :option:`fsync` but uses :manpage:`fdatasync(2)` to only sync data and - not metadata blocks. In Windows, FreeBSD, and DragonFlyBSD there is no + not metadata blocks. In Windows, FreeBSD, DragonFlyBSD or OSX there is no :manpage:`fdatasync(2)` so this falls back to using :manpage:`fsync(2)`. Defaults to 0, which means fio does not periodically issue and wait for a data-only sync to complete. diff --git a/configure b/configure index 59da2f7e..e32d5dcf 100755 --- a/configure +++ b/configure @@ -88,14 +88,14 @@ do_cc() { } compile_object() { - do_cc $CFLAGS -c -o $TMPO $TMPC + do_cc $CFLAGS -Werror-implicit-function-declaration -c -o $TMPO $TMPC } compile_prog() { local_cflags="$1" local_ldflags="$2 $LIBS" echo "Compiling test case $3" >> config.log - do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags + do_cc $CFLAGS -Werror-implicit-function-declaration $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags } feature_not_found() { diff --git a/fio.1 b/fio.1 index 77a2d799..6685e507 100644 --- a/fio.1 +++ b/fio.1 @@ -1050,7 +1050,7 @@ see \fBend_fsync\fR and \fBfsync_on_close\fR. .TP .BI fdatasync \fR=\fPint Like \fBfsync\fR but uses \fBfdatasync\fR\|(2) to only sync data and -not metadata blocks. In Windows, FreeBSD, and DragonFlyBSD there is no +not metadata blocks. In Windows, FreeBSD, DragonFlyBSD or OSX there is no \fBfdatasync\fR\|(2) so this falls back to using \fBfsync\fR\|(2). Defaults to 0, which means fio does not periodically issue and wait for a data\-only sync to complete. diff --git a/os/os-mac.h b/os/os-mac.h index a073300c..0d97f6b9 100644 --- a/os/os-mac.h +++ b/os/os-mac.h @@ -97,12 +97,6 @@ static inline int gettid(void) } #endif -/* - * For some reason, there's no header definition for fdatasync(), even - * if it exists. - */ -extern int fdatasync(int fd); - static inline bool fio_fallocate(struct fio_file *f, uint64_t offset, uint64_t len) { fstore_t store = {F_ALLOCATEALL, F_PEOFPOSMODE, offset, len}; -- 2.25.1