[PATCH 1/6] qemu: delete passt "repair" socket when appropriate

Laine Stump via Devel posted 6 patches 6 days, 19 hours ago
[PATCH 1/6] qemu: delete passt "repair" socket when appropriate
Posted by Laine Stump via Devel 6 days, 19 hours ago
From: Laine Stump <laine@redhat.com>

When using a vhost-user connection between passt and QEMU, passt will
autocreate a socket called ${socketname}.repair, but doesn't delete
this socket when it exits, so to be a good citizen, libvirtshould
delete it when we are tearing down the passt device plumbing.

Resolves: https://issues.redhat.com/browse/RHEL-80285
Signed-off-by: Laine Stump <laine@redhat.com>
---
 src/qemu/qemu_passt.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
index 520eb1244a..56d048d585 100644
--- a/src/qemu/qemu_passt.c
+++ b/src/qemu/qemu_passt.c
@@ -121,7 +121,7 @@ qemuPasstAddNetProps(virDomainObj *vm,
 
 
 static void
-qemuPasstKill(const char *pidfile, const char *passtSocketName)
+qemuPasstKill(const virDomainNetDef *net, const char *pidfile, const char *passtSocketName)
 {
     virErrorPtr orig_err;
     pid_t pid = 0;
@@ -135,6 +135,14 @@ qemuPasstKill(const char *pidfile, const char *passtSocketName)
 
     unlink(passtSocketName);
 
+    /* repair socket is (always) created by passt only for vhostuser mode */
+    if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_VHOSTUSER) {
+        g_autofree char *passtRepairSocketName
+            = g_strdup_printf("%s.repair", passtSocketName);
+
+        unlink(passtRepairSocketName);
+    }
+
     virErrorRestore(&orig_err);
 }
 
@@ -146,7 +154,7 @@ qemuPasstStop(virDomainObj *vm,
     g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
     g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
 
-    qemuPasstKill(pidfile, passtSocketName);
+    qemuPasstKill(net, pidfile, passtSocketName);
 }
 
 
@@ -351,6 +359,6 @@ qemuPasstStart(virDomainObj *vm,
     return 0;
 
  error:
-    qemuPasstKill(pidfile, passtSocketName);
+    qemuPasstKill(net, pidfile, passtSocketName);
     return -1;
 }
-- 
2.52.0
Re: [PATCH 1/6] qemu: delete passt "repair" socket when appropriate
Posted by Ján Tomko via Devel 6 days, 13 hours ago
On a Tuesday in 2026, Laine Stump via Devel wrote:
>From: Laine Stump <laine@redhat.com>
>
>When using a vhost-user connection between passt and QEMU, passt will
>autocreate a socket called ${socketname}.repair, but doesn't delete
>this socket when it exits, so to be a good citizen, libvirtshould

Missing space.

>delete it when we are tearing down the passt device plumbing.
>
>Resolves: https://issues.redhat.com/browse/RHEL-80285
>Signed-off-by: Laine Stump <laine@redhat.com>
>---
> src/qemu/qemu_passt.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
>diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
>index 520eb1244a..56d048d585 100644
>--- a/src/qemu/qemu_passt.c
>+++ b/src/qemu/qemu_passt.c
>@@ -121,7 +121,7 @@ qemuPasstAddNetProps(virDomainObj *vm,
>
>
> static void
>-qemuPasstKill(const char *pidfile, const char *passtSocketName)
>+qemuPasstKill(const virDomainNetDef *net, const char *pidfile, const char *passtSocketName)
> {
>     virErrorPtr orig_err;
>     pid_t pid = 0;
>@@ -135,6 +135,14 @@ qemuPasstKill(const char *pidfile, const char *passtSocketName)
>
>     unlink(passtSocketName);
>
>+    /* repair socket is (always) created by passt only for vhostuser mode */
>+    if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_VHOSTUSER) {
>+        g_autofree char *passtRepairSocketName
>+            = g_strdup_printf("%s.repair", passtSocketName);

If you drop 'passt' from the variable name, it might fit on one line.

Jano

>+
>+        unlink(passtRepairSocketName);
>+    }
>+
>     virErrorRestore(&orig_err);
> }
>
>@@ -146,7 +154,7 @@ qemuPasstStop(virDomainObj *vm,
>     g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
>     g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
>
>-    qemuPasstKill(pidfile, passtSocketName);
>+    qemuPasstKill(net, pidfile, passtSocketName);
> }
>
>
>@@ -351,6 +359,6 @@ qemuPasstStart(virDomainObj *vm,
>     return 0;
>
>  error:
>-    qemuPasstKill(pidfile, passtSocketName);
>+    qemuPasstKill(net, pidfile, passtSocketName);
>     return -1;
> }
>-- 
>2.52.0
>
Re: [PATCH 1/6] qemu: delete passt "repair" socket when appropriate
Posted by Michal Prívozník via Devel 6 days, 13 hours ago
On 2/24/26 08:52, Laine Stump via Devel wrote:
> From: Laine Stump <laine@redhat.com>
> 
> When using a vhost-user connection between passt and QEMU, passt will
> autocreate a socket called ${socketname}.repair, but doesn't delete
> this socket when it exits, so to be a good citizen, libvirtshould

s/libvirtshould/libvirt should/

> delete it when we are tearing down the passt device plumbing.
> 
> Resolves: https://issues.redhat.com/browse/RHEL-80285
> Signed-off-by: Laine Stump <laine@redhat.com>
> ---
>  src/qemu/qemu_passt.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
> index 520eb1244a..56d048d585 100644
> --- a/src/qemu/qemu_passt.c
> +++ b/src/qemu/qemu_passt.c
> @@ -121,7 +121,7 @@ qemuPasstAddNetProps(virDomainObj *vm,
>  
>  
>  static void
> -qemuPasstKill(const char *pidfile, const char *passtSocketName)
> +qemuPasstKill(const virDomainNetDef *net, const char *pidfile, const char *passtSocketName)
>  {
>      virErrorPtr orig_err;
>      pid_t pid = 0;
> @@ -135,6 +135,14 @@ qemuPasstKill(const char *pidfile, const char *passtSocketName)
>  
>      unlink(passtSocketName);
>  
> +    /* repair socket is (always) created by passt only for vhostuser mode */
> +    if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_VHOSTUSER) {
> +        g_autofree char *passtRepairSocketName
> +            = g_strdup_printf("%s.repair", passtSocketName);

NITPICK, I'm not sure what our coding style says about this (or if it
says anything at all). In cases like this what I usually do is split
declaration and initialization into two:

  g_autofree char *passtRepairSocketName = NULL;

  passtRepairSocketName = g_strdup_printf("%s.repair", passtSocketName);

Do with this information whatever you like.

> +
> +        unlink(passtRepairSocketName);
> +    }
> +
>      virErrorRestore(&orig_err);
>  }
>  
> @@ -146,7 +154,7 @@ qemuPasstStop(virDomainObj *vm,
>      g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
>      g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
>  
> -    qemuPasstKill(pidfile, passtSocketName);
> +    qemuPasstKill(net, pidfile, passtSocketName);
>  }
>  
>  
> @@ -351,6 +359,6 @@ qemuPasstStart(virDomainObj *vm,
>      return 0;
>  
>   error:
> -    qemuPasstKill(pidfile, passtSocketName);
> +    qemuPasstKill(net, pidfile, passtSocketName);
>      return -1;
>  }

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>

Michal