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