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
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
>
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
© 2016 - 2026 Red Hat, Inc.