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 [email protected] +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
