[libvirt] [PATCH v11 1/5] qemu: Move TLS object remove from DetachChr to RemoveChr

John Ferlan jferlan at redhat.com
Tue Oct 25 19:22:45 UTC 2016



On 10/25/2016 08:42 AM, Pavel Hrdina wrote:
> On Mon, Oct 24, 2016 at 06:46:17PM -0400, John Ferlan wrote:
>> Commit id '2c32237' added the TLS object removal to the DetachChrDevice
>> all when it should have been added to the RemoveChrDevice since that's
>> the norm for similar processing (e.g. disk)
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>>  src/qemu/qemu_hotplug.c | 44 +++++++++++++++++++++-----------------------
>>  1 file changed, 21 insertions(+), 23 deletions(-)
>>
>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>> index cf69945..31b5876 100644
>> --- a/src/qemu/qemu_hotplug.c
>> +++ b/src/qemu/qemu_hotplug.c
>> @@ -3549,7 +3549,9 @@ qemuDomainRemoveChrDevice(virQEMUDriverPtr driver,
>>                            virDomainChrDefPtr chr)
>>  {
>>      virObjectEventPtr event;
>> +    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
>>      char *charAlias = NULL;
>> +    char *tlsAlias = NULL;
>>      qemuDomainObjPrivatePtr priv = vm->privateData;
>>      int ret = -1;
>>      int rc;
>> @@ -3560,7 +3562,16 @@ qemuDomainRemoveChrDevice(virQEMUDriverPtr driver,
>>      if (!(charAlias = qemuAliasChardevFromDevAlias(chr->info.alias)))
>>          goto cleanup;
>>  
>> +    if (chr->source->type == VIR_DOMAIN_CHR_TYPE_TCP &&
>> +        chr->source->data.tcp.haveTLS == VIR_TRISTATE_BOOL_YES &&
>> +        !(tlsAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
>> +        goto cleanup;
>> +
>>      qemuDomainObjEnterMonitor(driver, vm);
>> +
>> +    if (tlsAlias && qemuMonitorDelObject(priv->mon, tlsAlias) < 0)
>> +        goto exit_monitor;
>> +
> 
> Those two qemu commands should be swapped as well.  This is similar to the
> issues that the next patch fixes.  The chardev uses tls object so the chardev
> should be detached before the tls object.

Took out my trusty pen and paper today and drew a large chart of attach
order, error order, and detach/remove order.

Long story short, for this one yes, moving the TLS deletion after the
chardev deletion is proper due to dependencies.

I've pushed this change.

John
> 
> ACK with that fixed.
> 
> Pavel
> 
>>      rc = qemuMonitorDetachCharDev(priv->mon, charAlias);
>>      if (qemuDomainObjExitMonitor(driver, vm) < 0)
>>          goto cleanup;
>> @@ -3579,7 +3590,13 @@ qemuDomainRemoveChrDevice(virQEMUDriverPtr driver,
>>  
>>   cleanup:
>>      VIR_FREE(charAlias);
>> +    VIR_FREE(tlsAlias);
>> +    virObjectUnref(cfg);
>>      return ret;
>> +
>> + exit_monitor:
>> +    ignore_value(qemuDomainObjExitMonitor(driver, vm));
>> +    goto cleanup;
>>  }
>>  
>>  
>> @@ -4461,13 +4478,10 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>>                                virDomainChrDefPtr chr)
>>  {
>>      int ret = -1;
>> -    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
>>      qemuDomainObjPrivatePtr priv = vm->privateData;
>>      virDomainDefPtr vmdef = vm->def;
>>      virDomainChrDefPtr tmpChr;
>> -    char *objAlias = NULL;
>>      char *devstr = NULL;
>> -    char *charAlias = NULL;
>>  
>>      if (!(tmpChr = virDomainChrFind(vmdef, chr))) {
>>          virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>> @@ -4480,26 +4494,16 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>>  
>>      sa_assert(tmpChr->info.alias);
>>  
>> -    if (!(charAlias = qemuAliasChardevFromDevAlias(tmpChr->info.alias)))
>> -        goto cleanup;
>> -
>> -    if (tmpChr->source->type == VIR_DOMAIN_CHR_TYPE_TCP &&
>> -        tmpChr->source->data.tcp.haveTLS == VIR_TRISTATE_BOOL_YES &&
>> -        !(objAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
>> -        goto cleanup;
>> -
>>      if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0)
>>          goto cleanup;
>>  
>>      qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info);
>>  
>>      qemuDomainObjEnterMonitor(driver, vm);
>> -    if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0)
>> -        goto exit_monitor;
>> -
>> -    if (objAlias && qemuMonitorDelObject(priv->mon, objAlias) < 0)
>> -        goto exit_monitor;
>> -
>> +    if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0) {
>> +        ignore_value(qemuDomainObjExitMonitor(driver, vm));
>> +        goto cleanup;
>> +    }
>>      if (qemuDomainObjExitMonitor(driver, vm) < 0)
>>          goto cleanup;
>>  
>> @@ -4511,13 +4515,7 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>>   cleanup:
>>      qemuDomainResetDeviceRemoval(vm);
>>      VIR_FREE(devstr);
>> -    VIR_FREE(charAlias);
>> -    virObjectUnref(cfg);
>>      return ret;
>> -
>> - exit_monitor:
>> -    ignore_value(qemuDomainObjExitMonitor(driver, vm));
>> -    goto cleanup;
>>  }
>>  
>>  
>> -- 
>> 2.7.4
>>
>> --
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list