[libvirt] [PATCH v2] qemu: fix broken autostart symlink after renaming domain.
Julio Faracco
jcfaracco at gmail.com
Sun Jul 15 16:48:11 UTC 2018
If a domain is configured to start on boot, it has a symlink to the
domain definition inside the autostart directory. If you rename this
domain, the definition is renamed too. The symlink need to be pointed to
this renamed file. This commit recreates the symlink after renaming the
XML file.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1594985
Signed-off-by: Julio Faracco <jcfaracco at gmail.com>
---
src/qemu/qemu_driver.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 5de9aaefbb..a4df482c9e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -20914,6 +20914,8 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
char *old_dom_name = NULL;
char *new_dom_cfg_file = NULL;
char *old_dom_cfg_file = NULL;
+ char *new_dom_autostart_link = NULL;
+ char *old_dom_autostart_link = NULL;
virCheckFlags(0, ret);
@@ -20934,6 +20936,30 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
vm->def->name)))
goto cleanup;
+ if (vm->autostart) {
+ if (!(new_dom_autostart_link = virDomainConfigFile(cfg->autostartDir,
+ new_dom_name)) ||
+ !(old_dom_autostart_link = virDomainConfigFile(cfg->autostartDir,
+ vm->def->name)))
+ goto cleanup;
+
+ if (unlink(old_dom_autostart_link) < 0 &&
+ errno != ENOENT &&
+ errno != ENOTDIR) {
+ virReportSystemError(errno,
+ _("Failed to delete symlink '%s'"),
+ old_dom_autostart_link);
+ goto cleanup;
+ }
+
+ if (symlink(new_dom_cfg_file, new_dom_autostart_link) < 0) {
+ virReportSystemError(errno,
+ _("Failed to create symlink '%s to '%s'"),
+ new_dom_autostart_link, new_dom_cfg_file);
+ goto cleanup;
+ }
+ }
+
event_old = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_UNDEFINED,
VIR_DOMAIN_EVENT_UNDEFINED_RENAMED);
@@ -20960,6 +20986,8 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
ret = 0;
cleanup:
+ VIR_FREE(old_dom_autostart_link);
+ VIR_FREE(new_dom_autostart_link);
VIR_FREE(old_dom_cfg_file);
VIR_FREE(new_dom_cfg_file);
VIR_FREE(old_dom_name);
--
2.17.1
More information about the libvir-list
mailing list