[libvirt] [PATCH 3/3] openvz: wire up domainUpdateDeviceFlags

Michal Privoznik mprivozn at redhat.com
Wed Jun 6 12:17:09 UTC 2012


On 03.06.2012 22:55, Guido Günther wrote:
> so we can update file system quota
> ---
>  src/openvz/openvz_driver.c |   95 ++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 95 insertions(+)
> 
> diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
> index 02a0133..8a1fb9a 100644
> --- a/src/openvz/openvz_driver.c
> +++ b/src/openvz/openvz_driver.c
> @@ -1948,6 +1948,100 @@ cleanup:
>  }
>  
>  
> +static int
> +openvzUpdateDevice(virDomainDefPtr vmdef,
> +                   virDomainDeviceDefPtr dev,
> +                   bool persist)
> +{
> +    virDomainFSDefPtr fs;
> +    int pos;
> +
> +    if (dev->type == VIR_DOMAIN_DEVICE_FS) {
> +        fs = dev->data.fs;
> +        pos = virDomainFSIndexByName(vmdef, fs->dst);
> +
> +        if (pos < 0) {
> +            openvzError(VIR_ERR_INVALID_ARG,
> +                        _("target %s doesn't exist."), fs->dst);
> +            return -1;
> +        }
> +
> +        /* We only allow updating the quota */

so shouldn't we shout if user tries changing something else like
wrpolicy or something?

> +        if (openvzSetDiskQuota(vmdef, dev->data.fs, persist) < 0) {
> +            return -1;
> +        }
> +        vmdef->fss[pos]->space_hard_limit = fs->space_hard_limit;
> +        vmdef->fss[pos]->space_soft_limit = fs->space_soft_limit;
> +    } else {
> +        openvzError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                    _("Can't modify device type '%s'"),
> +                    virDomainDeviceTypeToString(dev->type));
> +        return -1;
> +    }
> +
> +    return 0;
> +}
> +
> +
> +static int
> +openvzDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
> +                             unsigned int flags)
> +{
> +    int ret = -1;
> +    int veid;
> +    struct  openvz_driver *driver = dom->conn->privateData;
> +    virDomainDeviceDefPtr dev = NULL;
> +    virDomainObjPtr vm = NULL;
> +    virDomainDefPtr vmdef = NULL;
> +    bool persist = false;
> +
> +    virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE |
> +                  VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
> +
> +    openvzDriverLock(driver);
> +    vm = virDomainFindByUUID(&driver->domains, dom->uuid);
> +    vmdef = vm->def;
> +
> +    if (!vm) {
> +        openvzError(VIR_ERR_NO_DOMAIN, "%s",
> +                    _("no domain with matching uuid"));
> +        goto cleanup;
> +    }
> +
> +    if (virStrToLong_i(vmdef->name, NULL, 10, &veid) < 0) {
> +        openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                    _("Could not convert domain name to VEID"));
> +        goto cleanup;
> +    }
> +
> +    if (virDomainLiveConfigHelperMethod(driver->caps,
> +                                        vm,
> +                                        &flags,
> +                                        &vmdef) < 0)
> +        goto cleanup;
> +
> +    dev = virDomainDeviceDefParse(driver->caps, vmdef, xml,
> +                                  VIR_DOMAIN_XML_INACTIVE);
> +    if (!dev)
> +        goto cleanup;
> +
> +    if (flags & VIR_DOMAIN_AFFECT_CONFIG)
> +        persist = true;
> +
> +    if (openvzUpdateDevice(vmdef, dev, persist) < 0)
> +        goto cleanup;
> +
> +    ret = 0;
> +
> +cleanup:
> +    openvzDriverUnlock(driver);
> +    virDomainDeviceDefFree(dev);
> +    if (vm)
> +        virDomainObjUnlock(vm);
> +    return ret;
> +}
> +
> +
>  static virDriver openvzDriver = {
>      .no = VIR_DRV_OPENVZ,
>      .name = "OPENVZ",
> @@ -2002,6 +2096,7 @@ static virDriver openvzDriver = {
>      .domainIsPersistent = openvzDomainIsPersistent, /* 0.7.3 */
>      .domainIsUpdated = openvzDomainIsUpdated, /* 0.8.6 */
>      .isAlive = openvzIsAlive, /* 0.9.8 */
> +    .domainUpdateDeviceFlags = openvzDomainUpdateDeviceFlags, /* 0.9.14 */
>  };
>  
>  int openvzRegister(void) {

Otherwise looking good.

Michal




More information about the libvir-list mailing list