2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

ovsdb: Factor out code to fsync a file's containing directory.

In an upcoming commit, another function wants to do the same thing, so
break it out into a helper function.
This commit is contained in:
Ben Pfaff
2010-02-11 15:35:46 -08:00
parent a3d573ed9b
commit 8e71cf88b7
3 changed files with 35 additions and 11 deletions

View File

@@ -557,3 +557,34 @@ write_fully(int fd, const void *p_, size_t size, size_t *bytes_written)
}
return 0;
}
/* Given file name 'file_name', fsyncs the directory in which it is contained.
* Returns 0 if successful, otherwise a positive errno value. */
int
fsync_parent_dir(const char *file_name)
{
int error = 0;
char *dir;
int fd;
dir = dir_name(file_name);
fd = open(dir, O_RDONLY);
if (fd >= 0) {
if (fsync(fd)) {
if (errno == EINVAL || errno == EROFS) {
/* This directory does not support synchronization. Not
* really an error. */
} else {
error = errno;
VLOG_ERR("%s: fsync failed (%s)", dir, strerror(error));
}
}
close(fd);
} else {
error = errno;
VLOG_ERR("%s: open failed (%s)", dir, strerror(error));
}
free(dir);
return error;
}