mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
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: Fabiano Fidêncio <fidencio@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
dac174ee07
commit
ea7b20a263
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user