[libvirt] [PATCH] domain_conf: Include the correct console alias
Michal Privoznik
mprivozn at redhat.com
Fri Jun 28 14:45:08 UTC 2013
On 28.06.2013 15:55, Daniel P. Berrange wrote:
> On Fri, Jun 28, 2013 at 03:31:17PM +0200, Michal Privoznik wrote:
>> For some crazy backward compatibility, a console can by just an alias to
>> a serial device. This is detected in the XML formating function which
>> takes the values to format from corresponding serial device. Including
>> the device alias. This results in wrong alias being written into the XML
>> definition:
>>
>> <console type='pty' tty='/dev/pts/5'>
>> ...
>> <alias name='serial0'/>
>> </console>
>>
>> While holding the correct alias still in the memory, it doesn't matter.
>> However, it starts to matter as soon as libvirtd is restarted and the
>> (incorrect) alias is read from status file.
>> ---
>> src/conf/domain_conf.c | 12 +++++++++++-
>> 1 file changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index 011de71..61de836 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -16417,6 +16417,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
>> memcpy(&console, def->serials[n], sizeof(console));
>> console.deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
>> console.targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
>> + memcpy(&console.info, &def->consoles[n]->info, sizeof(console.info));
>> } else {
>> memcpy(&console, def->consoles[n], sizeof(console));
>> }
>> @@ -16427,11 +16428,20 @@ virDomainDefFormatInternal(virDomainDefPtr def,
>> def->nconsoles == 0 &&
>> def->nserials > 0) {
>> virDomainChrDef console;
>> + char *alias = NULL;
>> memcpy(&console, def->serials[n], sizeof(console));
>> console.deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE;
>> console.targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
>> - if (virDomainChrDefFormat(buf, &console, flags) < 0)
>> + if (console.info.alias) {
>> + if (VIR_STRDUP(alias, "console0") < 0)
>> + goto error;
>> + console.info.alias = alias;
>> + }
>> + if (virDomainChrDefFormat(buf, &console, flags) < 0) {
>> + VIR_FREE(alias);
>> goto error;
>> + }
>> + VIR_FREE(alias);
>
> This isn't any more correct that your previous patch. For the
> dummy <console> elements, the alias *must* be copied from /
> identical to the corresponding <serial> device config.
>
>
> Daniel
>
So what are you saying is, it's the <serial> that has the wrong alias
assigned? The output should be like this then?
<serial type='pty'>
<source path='/dev/pts/5'/>
<target type='isa-serial' port='0'/>
<alias name='console0'/>
<!-- originaly was serial0 -->
</serial>
<console type='pty' tty='/dev/pts/5'>
<source path='/dev/pts/5'/>
<target type='serial' port='0'/>
<alias name='console0'/>
</console>
Michal
More information about the libvir-list
mailing list