提交 ea7b20a2 编写于 作者: D Daniel P. Berrangé

util: introduce virFileDataSync

A wrapper that calls g_fsync on Win32/macOS and fdatasync
elsewhere. g_fsync is a stronger flush than we need but it
satisfies the caller's requirements & matches the approach
gnulib takes.
Reviewed-by: NFabiano Fidêncio <fidencio@redhat.com>
Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 dac174ee
......@@ -1976,6 +1976,7 @@ virFileChownFiles;
virFileClose;
virFileComparePaths;
virFileCopyACLs;
virFileDataSync;
virFileDeleteTree;
virFileDirectFdFlag;
virFileExists;
......
......@@ -216,7 +216,7 @@ virStorageBackendCopyToFD(virStorageVolDefPtr vol,
} while ((amtleft -= interval) > 0);
}
if (fdatasync(fd) < 0) {
if (virFileDataSync(fd) < 0) {
ret = -errno;
virReportSystemError(errno, _("cannot sync data to file '%s'"),
vol->target.path);
......@@ -2539,7 +2539,7 @@ storageBackendWipeLocal(const char *path,
remaining -= written;
}
if (fdatasync(fd) < 0) {
if (virFileDataSync(fd) < 0) {
virReportSystemError(errno,
_("cannot sync data to volume with path '%s'"),
path);
......
......@@ -154,7 +154,7 @@ runIO(const char *path, int fd, int oflags)
}
/* Ensure all data is written */
if (fdatasync(fdout) < 0) {
if (virFileDataSync(fdout) < 0) {
if (errno != EINVAL && errno != EROFS) {
/* fdatasync() may fail on some special FDs, e.g. pipes */
virReportSystemError(errno, _("unable to fsync %s"), fdoutname);
......
......@@ -4432,3 +4432,14 @@ virFileGetXAttr(const char *path,
return ret;
}
int
virFileDataSync(int fd)
{
#if defined(__APPLE__) || defined(WIN32)
return g_fsync(fd);
#else
return fdatasync(fd);
#endif
}
......@@ -372,3 +372,5 @@ int virFileSetXAttr(const char *path,
int virFileRemoveXAttr(const char *path,
const char *name)
G_GNUC_NO_INLINE;
int virFileDataSync(int fd);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册