From: Masayoshi Mizuma <m.mizuma@xxxxxxxxxxxxxx> A qemu guest which has virtiofs config fails to start if the previous starting failed because of invalid option or something. For example of the reproduction: # virsh start guest error: Failed to start domain guest error: internal error: process exited while connecting to monitor: qemu-system-x86_64: -foo: invalid option ... fix the option ... # virsh start guest error: Failed to start domain guest error: Cannot open log file: '/var/log/libvirt/qemu/guest-fs0-virtiofsd.log': Device or resource busy # That's because the virtiofsd which was executed on the former staring remains and virtlogd keeps to opening the log file. Stop virtiofsd when the qemu guest fails to start. Signed-off-by: Masayoshi Mizuma <m.mizuma@xxxxxxxxxxxxxx> --- src/qemu/qemu_domain.h | 1 + src/qemu/qemu_virtiofs.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index ca041e207b..7d47c030bd 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -426,6 +426,7 @@ struct _qemuDomainFSPrivate { virObject parent; char *vhostuser_fs_sock; + pid_t virtiofsd_pid; }; diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c index 2e239cad66..8684219915 100644 --- a/src/qemu/qemu_virtiofs.c +++ b/src/qemu/qemu_virtiofs.c @@ -250,6 +250,7 @@ qemuVirtioFSStart(virLogManagerPtr logManager, } QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = g_steal_pointer(&socket_path); + QEMU_DOMAIN_FS_PRIVATE(fs)->virtiofsd_pid = pid; ret = 0; cleanup: @@ -273,6 +274,7 @@ qemuVirtioFSStop(virQEMUDriverPtr driver G_GNUC_UNUSED, { g_autofree char *pidfile = NULL; virErrorPtr orig_err; + pid_t pid = QEMU_DOMAIN_FS_PRIVATE(fs)->virtiofsd_pid; virErrorPreserveLast(&orig_err); @@ -286,6 +288,9 @@ qemuVirtioFSStop(virQEMUDriverPtr driver G_GNUC_UNUSED, unlink(QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock); } + if (virProcessKill(pid, 0) == 0) + virProcessKillPainfully(pid, true); + cleanup: virErrorRestore(&orig_err); } -- 2.27.0