On 06/15/2015 03:47 PM, Peter Krempa wrote:
> ---
>  src/qemu/qemu_driver.c | 40 ++++++++++++++++------------------------
>  1 file changed, 16 insertions(+), 24 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 2cb0215..ceadc31 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -11246,12 +11246,12 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
>      virQEMUDriverPtr driver = dom->conn->privateData;
>      size_t i;
>      virDomainObjPtr vm = NULL;
> -    virDomainDefPtr persistentDef = NULL;
> +    virDomainDefPtr def;
> +    virDomainDefPtr persistentDef;
>      int ret = -1;
>      virDomainNetDefPtr net = NULL, persistentNet = NULL;
>      virNetDevBandwidthPtr bandwidth = NULL, newBandwidth = NULL;
>      virQEMUDriverConfigPtr cfg = NULL;
> -    virCapsPtr caps = NULL;
>      bool inboundSpecified = false, outboundSpecified = false;
> 
>      virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
> @@ -11280,31 +11280,24 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
>      if (virDomainSetInterfaceParametersEnsureACL(dom->conn, vm->def, flags) 
> < 0)
>          goto cleanup;
> 
> -    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
> +    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
>          goto cleanup;
> 
> -    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> +    if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
>          goto cleanup;

^^ goto endjob;

NOTE:

I see this is also an existing issue for qemuDomainPinIOThread - that is
the failure to ObjGetDefs goes to cleanup after a BeginJob rather than
going to endjob.

I know - a separate issue, but it may as well be fixed in this series...

ACK with the change here...

John


> 
> -    if (virDomainLiveConfigHelperMethod(caps, driver->xmlopt, vm, &flags,
> -                                        &persistentDef) < 0)
> +    if (def &&
> +        !(net = virDomainNetFind(vm->def, device))) {
> +        virReportError(VIR_ERR_INVALID_ARG,
> +                       _("Can't find device %s"), device);
>          goto endjob;
> -
> -    if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> -        net = virDomainNetFind(vm->def, device);
> -        if (!net) {
> -            virReportError(VIR_ERR_INVALID_ARG,
> -                           _("Can't find device %s"), device);
> -            goto endjob;
> -        }
>      }
> -    if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
> -        persistentNet = virDomainNetFind(persistentDef, device);
> -        if (!persistentNet) {
> -            virReportError(VIR_ERR_INVALID_ARG,
> -                           _("Can't find device %s"), device);
> -            goto endjob;
> -        }
> +
> +    if (persistentDef &&
> +        !(persistentNet = virDomainNetFind(persistentDef, device))) {
> +        virReportError(VIR_ERR_INVALID_ARG,
> +                       _("Can't find device %s"), device);
> +        goto endjob;
>      }
> 
>      if ((VIR_ALLOC(bandwidth) < 0) ||
> @@ -11340,7 +11333,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
>      if (!bandwidth->out->average)
>          VIR_FREE(bandwidth->out);
> 
> -    if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> +    if (net) {
>          if (VIR_ALLOC(newBandwidth) < 0)
>              goto endjob;
> 
> @@ -11392,7 +11385,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
>              goto endjob;
>      }
> 
> -    if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
> +    if (persistentNet) {
>          if (!persistentNet->bandwidth) {
>              persistentNet->bandwidth = bandwidth;
>              bandwidth = NULL;
> @@ -11426,7 +11419,6 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
>      virNetDevBandwidthFree(bandwidth);
>      virNetDevBandwidthFree(newBandwidth);
>      virDomainObjEndAPI(&vm);
> -    virObjectUnref(caps);
>      virObjectUnref(cfg);
>      return ret;
>  }
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to