On Thu, Oct 06, 2011 at 12:22:01PM +0200, Jiri Denemark wrote: > When saving domain XML (either config or status) we just overwrite old > content of the file. In case something fails during that process (e.g. > disk gets full) we lose both old and new content. This patch makes the > process more robust by writing the new content into a separate file and > only if that succeeds the original file is atomically replaced with the > new one. > --- > src/conf/domain_conf.c | 25 +++++++++++++++++++++---- > 1 files changed, 21 insertions(+), 4 deletions(-) By doing this you've almost addressed this BZ... https://bugzilla.redhat.com/show_bug.cgi?id=489946 ...almost... Checkout slides 78 -> 119 of the presentation linked there, paying note to the horrible tales of woe about OS-X and fsync() :-( We probably want to add some kind of virFileSync(int fd) API call that does the neccessary black magic. > > if (VIR_CLOSE(fd) < 0) { > virReportSystemError(errno, > _("cannot save config file '%s'"), > - configFile); > + newfile); > + goto cleanup; > + } > + > + if (rename(newfile, configFile) < 0) { > + virReportSystemError(errno, > + _("cannot rename config file '%s' as '%s'"), > + newfile, configFile); > goto cleanup; > } Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list