From 9f0beedd556daabd2ef48e05ead3fdab68598d2a Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 22 Jun 2020 16:43:26 +0300 Subject: storage/posix, libglusterfs: library function to sync filesystem Convert an ad-hoc hack to a regular library function gf_syncfs(). Signed-off-by: Dmitry Antipov Change-Id: I3ed93e9f28f22c273df1466ba4a458eacb8df395 Fixes: #1329 --- libglusterfs/src/common-utils.c | 20 ++++++++++++++++++++ libglusterfs/src/glusterfs/common-utils.h | 3 +++ libglusterfs/src/libglusterfs.sym | 1 + 3 files changed, 24 insertions(+) (limited to 'libglusterfs/src') diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 899d579e837..81c39959406 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -37,6 +37,9 @@ #ifndef GF_LINUX_HOST_OS #include #endif +#ifdef HAVE_SYNCFS_SYS +#include +#endif #include "glusterfs/compat-errno.h" #include "glusterfs/common-utils.h" @@ -5412,3 +5415,20 @@ gf_nanosleep(uint64_t nsec) return ret; } + +int +gf_syncfs(int fd) +{ + int ret = 0; +#if defined(HAVE_SYNCFS) + /* Linux with glibc recent enough. */ + ret = syncfs(fd); +#elif defined(HAVE_SYNCFS_SYS) + /* Linux with no library function. */ + ret = syscall(SYS_syncfs, fd); +#else + /* Fallback to generic UNIX stuff. */ + sync(); +#endif + return ret; +} diff --git a/libglusterfs/src/glusterfs/common-utils.h b/libglusterfs/src/glusterfs/common-utils.h index 1954cca639f..8948fada7c3 100644 --- a/libglusterfs/src/glusterfs/common-utils.h +++ b/libglusterfs/src/glusterfs/common-utils.h @@ -1204,6 +1204,9 @@ find_xlator_option_in_cmd_args_t(const char *option_name, cmd_args_t *args); int gf_d_type_from_ia_type(ia_type_t type); +int +gf_syncfs(int fd); + int gf_nanosleep(uint64_t nsec); diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym index c80b892df25..70408711c57 100644 --- a/libglusterfs/src/libglusterfs.sym +++ b/libglusterfs/src/libglusterfs.sym @@ -1180,4 +1180,5 @@ glusterfs_process_svc_detach mgmt_is_multiplexed_daemon xlator_is_cleanup_starting gf_nanosleep +gf_syncfs graph_total_client_xlator -- cgit