[libvirt] [PATCH 1/5] Introduce virDomainDetachDeviceAlias API

Peter Krempa pkrempa at redhat.com
Tue May 22 06:36:45 UTC 2018


On Mon, May 21, 2018 at 18:07:58 +0200, Michal Privoznik wrote:
> When detaching a device it can be uniquely identified by its
> alias. Instead of misusing virDomainDetachDeviceFlags which has
> the same signature introduce new function.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  include/libvirt/libvirt-domain.h |  3 +++
>  src/driver-hypervisor.h          |  6 ++++++
>  src/libvirt-domain.c             | 46 ++++++++++++++++++++++++++++++++++++++++
>  src/libvirt_public.syms          |  5 +++++
>  4 files changed, 60 insertions(+)

[...]

> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 2d86e48979..b32c1d3064 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -8349,6 +8349,52 @@ virDomainUpdateDeviceFlags(virDomainPtr domain,
>  }
>  
>  
> +/**
> + * virDomainDetachDeviceAlias:
> + * @domain: pointer to domain object
> + * @alias: device alias
> + * @flags: bitwise-OR of virDomainDeviceModifyFlags
> + *
> + * Detach a virtual device from a domain, using the alias to
> + * specify device.
> + *
> + * See virDomainDetachDeviceFlags() for more details.

Since this is a new API I think that we should finally fix the broken
semantics of the old API and return a 'timeout' code rather than
success. Obviously this will make the implementation quite more
challenging, but the old semantics are really broken.

Without this it is just syntax-sugar for callers which are too lazy to
extract the snippet from the XML and pass it to the old API.

> + *
> + * Returns 0 in case of success, -1 in case of failure.
> + */
> +int
> +virDomainDetachDeviceAlias(virDomainPtr domain,
> +                           const char *alias,
> +                           unsigned int flags)
> +{
> +    virConnectPtr conn;
> +
> +    VIR_DOMAIN_DEBUG(domain, "alias=%s, flags=0x%x", alias, flags);
> +
> +    virResetLastError();
> +
> +    virCheckDomainReturn(domain, -1);
> +    conn = domain->conn;
> +
> +    virCheckNonNullArgGoto(alias, error);
> +    virCheckReadOnlyGoto(conn->flags, error);
> +
> +    if (conn->driver->domainDetachDeviceAlias) {
> +        int ret;
> +        ret = conn->driver->domainDetachDeviceAlias(domain, alias, flags);
> +        if (ret < 0)
> +            goto error;
> +        return ret;
> +    }
> +
> +    virReportUnsupportedError();
> +
> + error:
> +    virDispatchError(domain->conn);
> +    return -1;
> +}
> +
> +
>  /**
>   * virConnectDomainEventRegister:
>   * @conn: pointer to the connection
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index 95df3a0dbc..cd6b0c1fdc 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -785,4 +785,9 @@ LIBVIRT_4.1.0 {
>          virStoragePoolLookupByTargetPath;
>  } LIBVIRT_3.9.0;
>  
> +LIBVIRT_4.4.0 {
> +    global:
> +        virDomainDetachDeviceAlias;
> +} LIBVIRT_4.1.0;
> +
>  # .... define new API here using predicted next version number ....
> -- 
> 2.16.1
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180522/6c37e727/attachment-0001.sig>


More information about the libvir-list mailing list