On Wed, 2020-03-25 at 11:18 +0100, Michal Privoznik wrote:
[...]
void
-qemuGetMemoryBackingBasePath(virQEMUDriverConfigPtr cfg,
+qemuGetMemoryBackingBasePath(virQEMUDriverPtr driver,
char **path)
{
- *path = g_strdup_printf("%s/libvirt/qemu", cfg->memoryBackingDir);
+ const char *root = virQEMUDriverGetEmbedRoot(driver);
+ g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
+
+ if (root) {
+ g_autofree char * hash = virDomainDriverHashRoot(QEMU_DRIVER_NAME, root);
+ *path = g_strdup_printf("%s/libvirt/%s", cfg->memoryBackingDir,
hash);
+ } else {
+ *path = g_strdup_printf("%s/libvirt/qemu", cfg->memoryBackingDir);
+ }
I'll reply here for convenience, but the same comments apply to the
previous and following patches as well.
As anticipated during our earlier discussion, this naive approach
solves the issue but it's a bit crude.
It work well enough when memoryBackingDir is configured to something
like /dev/shm, but if you leave that setting alone and use the
default instead, the generated path will go from
$root/lib/qemu/ram/libvirt/qemu/$domid-$domname/ram-node0
to
$root/lib/qemu/ram/libvirt/QEMU-embed-$roothash/$domid-$domname/ram-node0
which means that we're unnecessarily repeating the disambiguation
information twice. I think we need to be smarter than that, and only
use the hashed version when memoryBackingDir is outside of the
embedded root.
Two additional nits:
* QEMU_DRIVER_NAME is defined as the uppercase string "QEMU", so
the hash ends up not matching the one used elsewhere;
* the default non-embedded path looks like
/var/lib/libvirt/qemu/ram/libvirt/qemu/$domid-$domname/ram-node0
where both "libvirt" and "qemu" are repeated twice... While not
a functional issue per se, that looks like it should also be
addressed, don't you think?
--
Andrea Bolognani / Red Hat / Virtualization