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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user