From a65c39852775b17323fa4efee54bde12ce22a512 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 29 Jul 2015 15:52:19 +0800 Subject: [PATCH] common/syncfs: fall back to sync(2) if syncfs(2) not available Fixes: #12512 Signed-off-by: Kefu Chai (cherry picked from commit 08210d6a85527b0759f6dc4411f742bc13a4939f) Conflicts: src/common/sync_filesystem.h - subtle difference in #if/#else/#endif structure --- src/common/sync_filesystem.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/common/sync_filesystem.h b/src/common/sync_filesystem.h index b7eaea71e0e..8f45d04b3f6 100644 --- a/src/common/sync_filesystem.h +++ b/src/common/sync_filesystem.h @@ -34,22 +34,25 @@ inline int sync_filesystem(int fd) #ifdef HAVE_SYS_SYNCFS if (syncfs(fd) == 0) return 0; - else - return -errno; #elif defined(SYS_syncfs) if (syscall(SYS_syncfs, fd) == 0) return 0; - else - return -errno; #elif defined(__NR_syncfs) if (syscall(__NR_syncfs, fd) == 0) return 0; - else - return -errno; #endif +#if defined(HAVE_SYS_SYNCFS) || defined(SYS_syncfs) || defined(__NR_syncfs) + else if (errno == ENOSYS) { + sync(); + return 0; + } else { + return -errno; + } +#else sync(); return 0; +#endif } #endif -- 2.47.3