On 10/27/2012 07:04 AM, Eric Blake wrote: > On 10/26/2012 07:07 AM, Peter Krempa wrote: >> On 10/23/12 04:10, Eric Blake wrote: >>> This is the bare minimum to end a copy job (of course, until a >>> later patch adds the ability to start a copy job, this patch >>> doesn't do much in isolation; I've just split the patches to >>> ease the review). >>> >> >> ACK if the RHEL stuff will be pulled in, otherwise it will require a few >> changes. > > Here's what I'm squashing in for the non-RHEL change: Hit send too soon.. In addition to the compile fixes, > > diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c > index f812ac1..65df4f0 100644 > --- i/src/qemu/qemu_driver.c > +++ w/src/qemu/qemu_driver.c > @@ -12554,7 +12554,6 @@ qemuDomainBlockPivot(struct qemud_driver > *driver, virDomainObjPtr vm, > int ret = -1; > qemuDomainObjPrivatePtr priv = vm->privateData; > virDomainBlockJobInfo info; > - bool reopen = qemuCapsGet(priv->caps, QEMU_CAPS_DRIVE_REOPEN); > const char *format = > virStorageFileFormatTypeToString(disk->mirrorFormat); > > /* Probe the status, if needed. */ > @@ -12584,8 +12583,7 @@ qemuDomainBlockPivot(struct qemud_driver > *driver, virDomainObjPtr vm, > > /* Attempt the pivot. */ > qemuDomainObjEnterMonitorWithDriver(driver, vm); > - ret = qemuMonitorDrivePivot(priv->mon, device, disk->mirror, format, > - reopen); > + ret = qemuMonitorDrivePivot(priv->mon, device, disk->mirror, format); > qemuDomainObjExitMonitorWithDriver(driver, vm); > > /* Note that RHEL 6.3 'drive-reopen' has the remote risk of a I'm also squashing in some comment simplifications: diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c index 65df4f0..5309745 100644 --- i/src/qemu/qemu_driver.c +++ w/src/qemu/qemu_driver.c @@ -12545,8 +12545,7 @@ cleanup: /* Called while holding the VM job lock, to implement a block job * abort with pivot; this updates the VM definition as appropriate, on - * either success or failure (although there are some forms of - * catastrophic failure that will leave the VM unusable). */ + * either success or failure. */ static int qemuDomainBlockPivot(struct qemud_driver *driver, virDomainObjPtr vm, const char *device, virDomainDiskDefPtr disk) @@ -12586,11 +12585,6 @@ qemuDomainBlockPivot(struct qemud_driver *driver, virDomainObjPtr vm, ret = qemuMonitorDrivePivot(priv->mon, device, disk->mirror, format); qemuDomainObjExitMonitorWithDriver(driver, vm); - /* Note that RHEL 6.3 'drive-reopen' has the remote risk of a - * catastrophic failure, where the it fails but can't recover by - * reopening the source. Not much we can do about it. qemu 1.3 - * 'block-job-complete' is safer by design. */ - if (ret == 0) { /* XXX We want to revoke security labels and disk lease, as * well as audit that revocation, before dropping the original @@ -12607,9 +12601,10 @@ qemuDomainBlockPivot(struct qemud_driver *driver, virDomainObjPtr vm, disk->mirroring = false; qemuDomainDetermineDiskChain(driver, disk, true); } else { - /* On failure, qemu abandons the mirror, and attempts to - * revert back to the source disk. Hopefully it was able to - * reopen things. */ + /* On failure, qemu abandons the mirror, and reverts back to + * the source disk (RHEL 6.3 has a bug where the revert could + * cause catastrophic failure in qemu, but we don't need to + * worry about it here as it is not an upstream qemu problem. */ /* XXX should we be parsing the exact qemu error, or calling * 'query-block', to see what state we really got left in * before killing the mirroring job? And just as on the -- Eric Blake eblake@xxxxxxxxxx +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list