Re: [libvirt PATCH 08/16] qemu: do not put virtiofs socket in private data

2021-10-06 Thread Peter Krempa
On Wed, Oct 06, 2021 at 09:15:14 +0200, Ján Tomko wrote:
> Reconstruct the socket path from priv->libDir in every user.
> 
> Signed-off-by: Ján Tomko 
> ---
>  src/qemu/qemu_command.c   |  8 +---
>  src/qemu/qemu_extdevice.c |  6 ++
>  src/qemu/qemu_virtiofs.c  | 14 +++---
>  tests/qemuxml2argvtest.c  | 12 
>  4 files changed, 14 insertions(+), 26 deletions(-)

Reviewed-by: Peter Krempa 



[libvirt PATCH 08/16] qemu: do not put virtiofs socket in private data

2021-10-06 Thread Ján Tomko
Reconstruct the socket path from priv->libDir in every user.

Signed-off-by: Ján Tomko 
---
 src/qemu/qemu_command.c   |  8 +---
 src/qemu/qemu_extdevice.c |  6 ++
 src/qemu/qemu_virtiofs.c  | 14 +++---
 tests/qemuxml2argvtest.c  | 12 
 4 files changed, 14 insertions(+), 26 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index d0f961b8ea..dc4f91ce25 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2035,14 +2035,16 @@ qemuBuildDisksCommandLine(virCommand *cmd,
 
 static char *
 qemuBuildVHostUserFsChardevStr(const virDomainFSDef *fs,
-   const char *chardev_alias)
+   const char *chardev_alias,
+   qemuDomainObjPrivate *priv)
 {
 g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+g_autofree char *socket_path = qemuDomainGetVHostUserFSSocketPath(priv, 
fs);
 
 virBufferAddLit(, "socket");
 virBufferAsprintf(, ",id=%s", chardev_alias);
 virBufferAddLit(, ",path=");
-virQEMUBuildBufferEscapeComma(, 
QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock);
+virQEMUBuildBufferEscapeComma(, socket_path);
 return virBufferContentAndReset();
 }
 
@@ -2088,7 +2090,7 @@ qemuBuildVHostUserFsCommandLine(virCommand *cmd,
 g_autofree char *devstr = NULL;
 
 chardev_alias = qemuDomainGetVhostUserChrAlias(fs->info.alias);
-chrdevstr = qemuBuildVHostUserFsChardevStr(fs, chardev_alias);
+chrdevstr = qemuBuildVHostUserFsChardevStr(fs, chardev_alias, priv);
 
 virCommandAddArg(cmd, "-chardev");
 virCommandAddArg(cmd, chrdevstr);
diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
index 98b546fc73..ef0b3f1981 100644
--- a/src/qemu/qemu_extdevice.c
+++ b/src/qemu/qemu_extdevice.c
@@ -196,10 +196,8 @@ qemuExtDevicesStart(virQEMUDriver *driver,
 for (i = 0; i < def->nfss; i++) {
 virDomainFSDef *fs = def->fss[i];
 
-if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
-if (fs->sock)
-QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = 
g_strdup(fs->sock);
-else if (qemuVirtioFSStart(logManager, driver, vm, fs) < 0)
+if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS && !fs->sock) {
+if (qemuVirtioFSStart(logManager, driver, vm, fs) < 0)
 return -1;
 }
 }
diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
index 15c05479c8..08a8b4ed42 100644
--- a/src/qemu/qemu_virtiofs.c
+++ b/src/qemu/qemu_virtiofs.c
@@ -183,8 +183,7 @@ qemuVirtioFSStart(virLogManager *logManager,
 if (!(pidfile = qemuVirtioFSCreatePidFilename(vm, fs->info.alias)))
 goto cleanup;
 
-if (!(socket_path = qemuVirtioFSCreateSocketFilename(vm, fs->info.alias)))
-goto cleanup;
+socket_path = qemuDomainGetVHostUserFSSocketPath(vm->privateData, fs);
 
 if ((fd = qemuVirtioFSOpenChardev(driver, vm, socket_path)) < 0)
 goto cleanup;
@@ -251,12 +250,9 @@ qemuVirtioFSStart(virLogManager *logManager,
 goto error;
 }
 
-QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = 
g_steal_pointer(_path);
 ret = 0;
 
  cleanup:
-if (socket_path)
-unlink(socket_path);
 return ret;
 
  error:
@@ -264,6 +260,8 @@ qemuVirtioFSStart(virLogManager *logManager,
 virProcessKillPainfully(pid, true);
 if (pidfile)
 unlink(pidfile);
+if (socket_path)
+unlink(socket_path);
 goto cleanup;
 }
 
@@ -284,8 +282,10 @@ qemuVirtioFSStop(virQEMUDriver *driver G_GNUC_UNUSED,
 if (virPidFileForceCleanupPathFull(pidfile, true) < 0) {
 VIR_WARN("Unable to kill virtiofsd process");
 } else {
-if (QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock)
-unlink(QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock);
+g_autofree char *socket_path = NULL;
+
+socket_path = qemuDomainGetVHostUserFSSocketPath(vm->privateData, fs);
+unlink(socket_path);
 }
 
  cleanup:
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index e35380293c..7df3946751 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -436,18 +436,6 @@ testCompareXMLToArgvCreateArgs(virQEMUDriver *drv,
 }
 }
 
-for (i = 0; i < vm->def->nfss; i++) {
-virDomainFSDef *fs = vm->def->fss[i];
-char *s;
-
-if (fs->fsdriver != VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS ||
-QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock)
-continue;
-
-s = g_strdup_printf("/tmp/lib/domain--1-guest/fs%zu-fs.sock", i);
-QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = s;
-}
-
 if (vm->def->vsock) {
 virDomainVsockDef *vsock = vm->def->vsock;
 qemuDomainVsockPrivate *vsockPriv =
-- 
2.31.1