On 6/12/26 07:14, Radosław Śmigielski via Devel wrote:
> From: Radoslaw Smigielski <[email protected]>
> 
> LXC domains did not assign device aliases to filesystem devices
> during domain startup. Only console devices received aliases.
> 
> This change assigns aliases in the format 'fs0', 'fs1', etc. to all
> filesystem devices during domain startup, following the same pattern
> used for console devices.
> 
> Before this patch, virsh dumpxml showed filesystem devices without aliases:
> 
>     <filesystem type='mount' accessmode='passthrough'>
>       <source dir='/var/lib/libvirt/lxc/demo-root'/>
>       <target dir='/'/>
>     </filesystem>
>     <filesystem type='file' accessmode='passthrough'>
>       <driver type='loop' format='raw'/>
>       <source file='/var/tmp/short6.raw'/>
>       <target dir='/short6'/>
>     </filesystem>
>     <console type='pty' tty='/dev/pts/8'>
>       <source path='/dev/pts/8'/>
>       <target type='lxc' port='0'/>
>       <alias name='console0'/>    <!-- Only console has alias -->
>     </console>
> 
> After this patch, filesystem devices have auto-generated aliases:
> 
>     <filesystem type='mount' accessmode='passthrough'>
>       <source dir='/var/lib/libvirt/lxc/demo-root'/>
>       <target dir='/'/>
>       <alias name='fs0'/>          <!-- Now assigned -->
>     </filesystem>
>     <filesystem type='file' accessmode='passthrough'>
>       <driver type='loop' format='raw'/>
>       <source file='/var/tmp/short6.raw'/>
>       <target dir='/short6'/>
>       <alias name='fs1'/>          <!-- Now assigned -->
>     </filesystem>
>     <console type='pty' tty='/dev/pts/8'>
>       <source path='/dev/pts/8'/>
>       <target type='lxc' port='0'/>
>       <alias name='console0'/>
>     </console>
> 
> This is a prerequisite for fixing bug #63 (loop device path length
> limitation), where filesystem device aliases will be used to compose
> synthetic lo_file_name references in the format "libvirt-$UUID-$DEVALIAS".
> 
> Related: https://gitlab.com/libvirt/libvirt/-/work_items/63
> Signed-off-by: Radoslaw Smigielski <[email protected]>
> ---
>  src/lxc/lxc_process.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
> index 2c0bcb9dd3aa..aae9fcc9dfd1 100644
> --- a/src/lxc/lxc_process.c
> +++ b/src/lxc/lxc_process.c
> @@ -1350,6 +1350,12 @@ int virLXCProcessStart(virLXCDriver * driver,
>          vm->def->consoles[i]->info.alias = g_strdup_printf("console%zu", i);
>      }
>  
> +    VIR_DEBUG("Setting up filesystem aliases");
> +    for (i = 0; i < vm->def->nfss; i++) {
> +        g_free(vm->def->fss[i]->info.alias);

I don't think this g_free() is necessary. I know you took inspiration
from a couple of lines above but I find it pointless there too. I mean,
every domain starts with no aliases (in its inactive state). Then this
function calls the following at its beginning:

    if (virDomainObjSetDefTransient(driver->xmlopt, vm, NULL) < 0)
        goto cleanup;

which copies inactive domain definition (i.e. XML parser skips aliases
intentionally) into vm->newDef. So later when domain is shutoff,
virDomainObjRemoveTransientDef() is called which throws away vm->def and
restores the original definition (without aliases) from vm->newDef.

I can remove it before merging, if you want to merge just this one. I
worry that 2/2 is a bit more complicated.

> +        vm->def->fss[i]->info.alias = g_strdup_printf("fs%zu", i);
> +    }
> +
>      VIR_DEBUG("Setting up Interfaces");
>      if (virLXCProcessSetupInterfaces(driver, vm->def, &veths) < 0)
>          goto cleanup;

Michal

Reply via email to