]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Move qemuExtDevicesStop() before removing the pidfiles
authorMasayoshi Mizuma <m.mizuma@jp.fujitsu.com>
Wed, 11 Nov 2020 13:35:24 +0000 (08:35 -0500)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 11 Nov 2020 14:20:12 +0000 (15:20 +0100)
A qemu guest which has virtiofs config fails to start if the previous
starting failed because of invalid option or something.

That's because the virtiofsd isn't killed by virPidFileForceCleanupPath()
on the former failure because the pidfile was already removed by
virFileDeleteTree(priv->libDir) in qemuProcessStop(), so
virPidFileForceCleanupPath() just returned.

Move qemuExtDevicesStop() before virFileDeleteTree(priv->libDir) so that
virPidFileForceCleanupPath() can kill virtiofsd correctly.

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
  #

Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_process.c

index 0a36b49c850ad75246463d5ff7cdf840cf7d84c8..1963de9fb89de4809f9b0931c6eb0df17b36b4d9 100644 (file)
@@ -7638,6 +7638,8 @@ void qemuProcessStop(virQEMUDriverPtr driver,
     /* Do this before we delete the tree and remove pidfile. */
     qemuProcessKillManagedPRDaemon(vm);
 
+    qemuExtDevicesStop(driver, vm);
+
     virFileDeleteTree(priv->libDir);
     virFileDeleteTree(priv->channelTargetDir);
 
@@ -7654,8 +7656,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,
 
     qemuDomainCleanupRun(driver, vm);
 
-    qemuExtDevicesStop(driver, vm);
-
     qemuDBusStop(driver, vm);
 
     vm->def->id = -1;