[libvirt] [PATCH v3] qemu: fix broken autostart symlink after renaming domain.

Julio Faracco jcfaracco at gmail.com
Tue Jul 17 03:54:57 UTC 2018


Changelog:
V1: The patch was automatically rejected due to some tabs
automatically added by my VIM editor.
V2: Tabs changed by spaces.
V3: Rebasing the patch considering the Erik's suggestions.

--
Julio Cesar Faracco
Em ter, 17 de jul de 2018 às 00:52, Julio Faracco
<jcfaracco at gmail.com> escreveu:
>
> 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 | 42 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 8fae46370e..6bbea324b9 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,22 @@ 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 (virFileIsLink(old_dom_autostart_link) &&
> +            unlink(old_dom_autostart_link) < 0) {
> +            virReportSystemError(errno,
> +                                 _("Failed to delete symlink '%s'"),
> +                                 old_dom_autostart_link);
> +            goto cleanup;
> +        }
> +    }
> +
>      event_old = virDomainEventLifecycleNewFromObj(vm,
>                                              VIR_DOMAIN_EVENT_UNDEFINED,
>                                              VIR_DOMAIN_EVENT_UNDEFINED_RENAMED);
> @@ -20946,6 +20964,16 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
>      if (virDomainSaveConfig(cfg->configDir, driver->caps, vm->def) < 0)
>          goto rollback;
>
> +
> +    if (vm->autostart) {
> +        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 rollback;
> +        }
> +    }
> +
>      if (virFileExists(old_dom_cfg_file) &&
>          unlink(old_dom_cfg_file) < 0) {
>          virReportSystemError(errno,
> @@ -20960,6 +20988,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);
> @@ -20979,6 +21009,18 @@ qemuDomainRenameCallback(virDomainObjPtr vm,
>      if (virFileExists(new_dom_cfg_file))
>          unlink(new_dom_cfg_file);
>
> +    if (vm->autostart) {
> +        if (virFileExists(new_dom_autostart_link))
> +            unlink(new_dom_autostart_link);
> +
> +        if (!virFileExists(old_dom_autostart_link) &&
> +            symlink(old_dom_cfg_file, old_dom_autostart_link) < 0) {
> +            virReportSystemError(errno,
> +                                 _("Failed to create symlink '%s to '%s'"),
> +                                 old_dom_autostart_link, old_dom_cfg_file);
> +        }
> +    }
> +
>      goto cleanup;
>  }
>
> --
> 2.17.1
>




More information about the libvir-list mailing list