From: Lennart Poettering Date: Wed, 3 Feb 2021 19:53:32 +0000 (+0100) Subject: fs-util: add fsync_path_and_parent_at() X-Git-Tag: v250-rc1~971^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=32a3041656a6efefc4880f78cca3b4bd4b135f66;p=thirdparty%2Fsystemd.git fs-util: add fsync_path_and_parent_at() --- diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 62c7954c843..7d7beb13dcf 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -1508,6 +1508,22 @@ int fsync_parent_at(int at_fd, const char *path) { return fsync_directory_of_file(opened_fd); } +int fsync_path_and_parent_at(int at_fd, const char *path) { + _cleanup_close_ int opened_fd = -1; + + if (isempty(path)) { + if (at_fd != AT_FDCWD) + return fsync_full(at_fd); + + opened_fd = open(".", O_RDONLY|O_DIRECTORY|O_CLOEXEC); + } else + opened_fd = openat(at_fd, path, O_RDONLY|O_NOFOLLOW|O_NONBLOCK|O_CLOEXEC); + if (opened_fd < 0) + return -errno; + + return fsync_full(opened_fd); +} + int syncfs_path(int atfd, const char *path) { _cleanup_close_ int fd = -1; diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index c4ab98dbb4e..d612cbe404a 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -141,6 +141,7 @@ int fsync_directory_of_file(int fd); int fsync_full(int fd); int fsync_path_at(int at_fd, const char *path); int fsync_parent_at(int at_fd, const char *path); +int fsync_path_and_parent_at(int at_fd, const char *path); int syncfs_path(int atfd, const char *path);