On 07/01/2013 07:29 AM, Laszlo Ersek wrote: > some comments below > > On 06/06/13 17:06, Tomoki Sekiyama wrote: >> Support guest-fsfreeze-freeze and guest-fsfreeze-thaw commands for Windows >> guests. When fsfreeze command is issued, it calls the VSS requester to >> freeze filesystems and applications. On thaw command, it again tells the VSS >> requester to thaw them. >> >> int64_t qmp_guest_fsfreeze_thaw(Error **err) >> { >> + int i; >> + >> + if (!vss_initialized()) { >> + error_set(err, QERR_UNSUPPORTED); >> + return 0; >> + } >> + >> + qga_vss_fsfreeze_thaw(&i, err); > > I wonder how libvirt interprets a failure to thaw -- does it expect > filesystems to remain frozen? (CC'ing Eric.) On failure to thaw, libvirt marks the virDomainSnapshotCreateXML() API call as failed, and logs the failure returned from the guest agent; but beyond that, there really isn't anything further that libvirt can attempt. Guest freeze/thaw is a best-effort attempt, and we don't really have any clean way to recover from a non-cooperative guest (ie. it's no different from a Linux guest managing to kill off the guest agent daemon in the guest at the wrong time). In short, a failed snapshot request has no guarantees on whether the guest is frozen or thawed, and libvirt currently has no additional support to try a thaw in isolation (although there is an intentionally unsupported 'virsh qemu-agent-command' for attempting recovery manually). > ... This patch made me look at ga_command_state_cleanup_all(). > Apparently the POSIX flavor thaws filesystems if qemu-ga exits before a > thaw command over QMP; see guest_fsfreeze_cleanup() and > ga_command_state_init(). Do you think something similar would be useful > for the Windows flavor as well? I agree that it is better to try and clean up a thaw on any error case (including the error of qemu-ga exiting without seeing a QMP thaw request), if only to minimize the chance of failure leaving the system wedged with no chance of further recovery attempts. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org