From: Kefu Chai Date: Wed, 29 Jul 2015 07:52:19 +0000 (+0800) Subject: common/syncfs: fall back to sync(2) if syncfs(2) not available X-Git-Tag: v0.94.6~95^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F5530%2Fhead;p=ceph.git 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 --- diff --git a/src/common/sync_filesystem.h b/src/common/sync_filesystem.h index b7eaea71e0ed..8f45d04b3f6b 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