Skip to content

Commit

Permalink
qemu: Move qemuExtDevicesStop() before removing the pidfiles
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mmizuma authored and zippy2 committed Nov 11, 2020
1 parent bd15480 commit 5cde9de
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/qemu/qemu_process.c
Expand Up @@ -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);

Expand All @@ -7654,8 +7656,6 @@ void qemuProcessStop(virQEMUDriverPtr driver,

qemuDomainCleanupRun(driver, vm);

qemuExtDevicesStop(driver, vm);

qemuDBusStop(driver, vm);

vm->def->id = -1;
Expand Down

0 comments on commit 5cde9de

Please sign in to comment.