[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] libxl: support domainReset



Jim Fehlig wrote:
> Currently, libxl_send_trigger() does not implement the LIBXL_TRIGGER_RESET
> option, but domainReset can be implemented in the libxl driver by
> forcibly destroying the domain and starting it again.
>   

Any objections to pushing this patch?  I have several patches on the
list getting stale...

Regards,
Jim

> Signed-off-by: Jim Fehlig <jfehlig suse com>
> ---
>  src/libxl/libxl_driver.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 57 insertions(+)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 67fd7bc6..08018d4 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -979,6 +979,62 @@ libxlDomainReboot(virDomainPtr dom, unsigned int flags)
>  }
>  
>  static int
> +libxlDomainReset(virDomainPtr dom, unsigned int flags)
> +{
> +    libxlDriverPrivatePtr driver = dom->conn->privateData;
> +    virDomainObjPtr vm;
> +    int ret = -1;
> +    libxlDomainObjPrivatePtr priv;
> +
> +    virCheckFlags(0, -1);
> +
> +    if (!(vm = libxlDomObjFromDomain(dom)))
> +        goto cleanup;
> +
> +    if (virDomainResetEnsureACL(dom->conn, vm->def) < 0)
> +        goto cleanup;
> +
> +    if (!virDomainObjIsActive(vm)) {
> +        virReportError(VIR_ERR_OPERATION_INVALID,
> +                       "%s", _("Domain is not running"));
> +        goto cleanup;
> +    }
> +
> +    /*
> +     * The semantics of reset can be achieved by forcibly destroying
> +     * the domain and starting it again.
> +     */
> +    priv = vm->privateData;
> +    if (libxl_domain_destroy(priv->ctx, vm->def->id, NULL) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Failed to reset domain '%d'"), vm->def->id);
> +        goto cleanup;
> +    }
> +
> +    if (!libxlDomainCleanupJob(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED)) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Failed to cleanup domain '%d' after reset"),
> +                       vm->def->id);
> +        vm = NULL;
> +        goto cleanup;
> +    }
> +
> +    if (libxlDomainStart(driver, vm, false, -1) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Failed to start domain '%d' after reset"),
> +                       vm->def->id);
> +        goto cleanup;
> +    }
> +
> +    ret = 0;
> +
> + cleanup:
> +    if (vm)
> +        virObjectUnlock(vm);
> +    return ret;
> +}
> +
> +static int
>  libxlDomainDestroyFlags(virDomainPtr dom,
>                          unsigned int flags)
>  {
> @@ -4758,6 +4814,7 @@ static virDriver libxlDriver = {
>      .domainShutdown = libxlDomainShutdown, /* 0.9.0 */
>      .domainShutdownFlags = libxlDomainShutdownFlags, /* 0.9.10 */
>      .domainReboot = libxlDomainReboot, /* 0.9.0 */
> +    .domainReset = libxlDomainReset, /* 1.2.8 */
>      .domainDestroy = libxlDomainDestroy, /* 0.9.0 */
>      .domainDestroyFlags = libxlDomainDestroyFlags, /* 0.9.4 */
>      .domainGetOSType = libxlDomainGetOSType, /* 0.9.0 */
>   


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]