From 63d59b8dcf4a911703e5188bc14c39b5eea0d050 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 22 Jul 2019 13:48:12 +0200 Subject: [PATCH] fs-util: add fsync_full() helper We usually combine an fsync() with fsync_directory_of_file() hence let's add a helper that does both in one. --- src/basic/fs-util.c | 11 +++++++++++ src/basic/fs-util.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 3ed8e2c8a9..f929db9c23 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -1298,6 +1298,17 @@ int fsync_directory_of_file(int fd) { return 0; } +int fsync_full(int fd) { + int r, q; + + /* Sync both the file and the directory */ + + r = fsync(fd) < 0 ? -errno : 0; + q = fsync_directory_of_file(fd); + + return r < 0 ? r : q; +} + int fsync_path_at(int at_fd, const char *path) { _cleanup_close_ int opened_fd = -1; int fd; diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index c5527cc44f..c7c5899815 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -114,6 +114,7 @@ void unlink_tempfilep(char (*p)[]); int unlinkat_deallocate(int fd, const char *name, int flags); int fsync_directory_of_file(int fd); +int fsync_full(int fd); int fsync_path_at(int at_fd, const char *path); int syncfs_path(int atfd, const char *path);