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@xxxxxxxxxx> > --- > 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@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list