[Adding the correct mailing list, removing libvirt-list-owner] On Fri, Feb 24, 2017 at 05:35:31PM +0800, WangJie (Captain) wrote: > Hello, I got a question here. When we create consistent active external > snapshots with flag “VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE” , the > qemuDomainSnapshotFSFreeze will be called firstly to freeze all filesystems > in vm, and then create snapshots. For windows vm, freezing filesystems used > by vss service. If IO pressure in vm is too big or internal error happened in > vss , freezing filesytems will failed , and qemuDomainSnapshotFSFreeze > returns 0 which meaning that no filesystems are frozen. In the function > qemuDomainSnapshotCreateActiveExternal, libvirt creates external snapshots > all the same in such a situation that qemuDomainSnapshotFSFreeze returns 0, > but the created snapshots are not consistent snapshots in such a situation . > So shouldn't we abandon creating snapshots and goto cleanup in the situation > that qemuDomainSnapshotFSFreeze returns 0? > > > The code below: > > > static int > qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, > virQEMUDriverPtr driver, > virDomainObjPtr vm, > virDomainSnapshotObjPtr snap, > unsigned int flags) > { > virObjectEventPtr event; > bool resume = false; > int ret = -1; > qemuDomainObjPrivatePtr priv = vm->privateData; > char *xml = NULL; > bool memory = snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL; > bool memory_unlink = false; > bool atomic = !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC); > bool transaction = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION); > int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */ > bool pmsuspended = false; > virQEMUDriverConfigPtr cfg = NULL; > int compressed; > char *compressedpath = NULL; > > /* If quiesce was requested, then issue a freeze command, and a > * counterpart thaw command when it is actually sent to agent. > * The command will fail if the guest is paused or the guest agent > * is not running, or is already quiesced. */ > if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE) { > int freeze = qemuDomainSnapshotFSFreeze(driver, vm, NULL, 0); > if (freeze < 0) { > /* the helper reported the error */ > if (freeze == -2) > thaw = -1; /* the command is sent but agent failed */ > goto cleanup; > } > thaw = 1; > } > > ...... > ......
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list