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

Re: [libvirt] [PATCH 8/8] lxc: use job functions in lxcDomain* functions that perform modify actions.



On Tue, May 17, 2016 at 12:36:54AM +0300, Katerina Koukiou wrote:
> Use the recently added job functions and unlock the virDomainObj while
> performing the respective modify operation.
> This commit affects lxcDomain{DestroyFlags, Reboot, SetBlkioParameters,
> SetMemoryParameters, SetMetadata, SetSchedulerParameterFlags, ShutdownFlags}
> 
> Signed-off-by: Katerina Koukiou <k koukiou gmail com>
> ---
>  src/lxc/lxc_driver.c | 114 +++++++++++++++++++++++++++++++++++++--------------
>  1 file changed, 83 insertions(+), 31 deletions(-)
> 
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index 2d610f4..7cdea2c 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -857,16 +857,19 @@ lxcDomainSetMemoryParameters(virDomainPtr dom,

Adding extra context:

    if (virDomainSetMemoryParametersEnsureACL(dom->conn, vm->def, flags) < 0 ||
        !(caps = virLXCDriverGetCapabilities(driver, false)) ||
        virDomainLiveConfigHelperMethod(caps, driver->xmlopt,
>                                          vm, &flags, &vmdef) < 0)
>          goto cleanup;
>  
> +    if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0)
> +        goto cleanup;

This should be called between the virDomainSetMemoryParametersEnsureACL and
virDomainLiveConfigHelperMethod calls above.

In virDomainLiveConfigHelperMethod, there is a check to see if the
domain is active when AFFECT_LIVE is set.

Since virLXCDomainObjBeginJob unlocks the virDomainObjPtr lock,
the domain could possibly be destroyed while we wait for the job
and the check results would no longer be valid.

(Found while trying to remove the remaining uses of
 virDomainLiveConfigHelperMethod)

Jan

> +
>      if (flags & VIR_DOMAIN_AFFECT_LIVE &&
>          !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_MEMORY)) {
>          virReportError(VIR_ERR_OPERATION_INVALID,
>                         "%s", _("cgroup memory controller is not mounted"));


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