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

Ján Tomko jtomko at redhat.com
Thu May 26 13:51:02 UTC 2016


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 at 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"));




More information about the libvir-list mailing list