[libvirt] [PATCH] qemu: blockjob: Call qemuDomainSupportsBlockJobs only on online VMs
Eric Blake
eblake at redhat.com
Thu Apr 30 14:40:56 UTC 2015
On 04/30/2015 08:37 AM, Peter Krempa wrote:
> Since the qemu capabilities are not initialized for offline VMs the
> caller might get suboptimal error message:
>
> $ virsh blockjob VM PATH --bandwidth 1
> error: unsupported configuration: block jobs not supported with this QEMU binary
>
> Move the checks after we make sure that the VM is alive.
> ---
> src/qemu/qemu_driver.c | 36 ++++++++++++++++++------------------
> 1 file changed, 18 insertions(+), 18 deletions(-)
ACK; safe enough for freeze
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 3695b26..d6e7570 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -16555,34 +16555,34 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
> goto cleanup;
> }
>
> - if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
> + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> goto cleanup;
>
> + if (!virDomainObjIsActive(vm)) {
> + virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> + _("domain is not running"));
> + goto endjob;
> + }
> +
> + if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
> + goto endjob;
> +
> if (!modern) {
> if (base) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> _("partial block pull not supported with this "
> "QEMU binary"));
> - goto cleanup;
> + goto endjob;
> }
>
> if (bandwidth) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> _("setting bandwidth at start of block pull not "
> "supported with this QEMU binary"));
> - goto cleanup;
> + goto endjob;
> }
> }
>
> - if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> - goto cleanup;
> -
> - if (!virDomainObjIsActive(vm)) {
> - virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> - _("domain is not running"));
> - goto endjob;
> - }
> -
> if (!(device = qemuDiskPathToAlias(vm, path, &idx)))
> goto endjob;
> disk = vm->def->disks[idx];
> @@ -16682,9 +16682,6 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
> if (virDomainBlockJobAbortEnsureACL(dom->conn, vm->def) < 0)
> goto cleanup;
>
> - if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
> - goto cleanup;
> -
> if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> goto cleanup;
>
> @@ -16694,6 +16691,9 @@ qemuDomainBlockJobAbort(virDomainPtr dom,
> goto endjob;
> }
>
> + if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
> + goto endjob;
> +
> if (!(device = qemuDiskPathToAlias(vm, path, &idx)))
> goto endjob;
> disk = vm->def->disks[idx];
> @@ -16896,9 +16896,6 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom,
> if (virDomainBlockJobSetSpeedEnsureACL(dom->conn, vm->def) < 0)
> goto cleanup;
>
> - if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
> - goto cleanup;
> -
> if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> goto cleanup;
>
> @@ -16908,6 +16905,9 @@ qemuDomainBlockJobSetSpeed(virDomainPtr dom,
> goto endjob;
> }
>
> + if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
> + goto endjob;
> +
> if (!(device = qemuDiskPathToAlias(vm, path, NULL)))
> goto endjob;
>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150430/3b72c5b2/attachment-0001.sig>
More information about the libvir-list
mailing list