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