[libvirt] [PATCH 1/7] Add public API stubs for virStorageVolCreateXMLFrom
Daniel P. Berrange
berrange at redhat.com
Mon May 11 12:39:52 UTC 2009
On Mon, May 04, 2009 at 01:42:56PM -0400, Cole Robinson wrote:
>
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
> include/libvirt/libvirt.h | 4 +++
> include/libvirt/libvirt.h.in | 4 +++
> src/driver.h | 6 ++++
> src/libvirt.c | 61 ++++++++++++++++++++++++++++++++++++++++-
> src/libvirt_public.syms | 5 +++
> 5 files changed, 78 insertions(+), 2 deletions(-)
ACK, this looks good to me.
Daniel
>
> diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h
> index 30f559d..b1e45e4 100644
> --- a/include/libvirt/libvirt.h
> +++ b/include/libvirt/libvirt.h
> @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol);
> virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
> const char *xmldesc,
> unsigned int flags);
> +virStorageVolPtr virStorageVolCreateXMLFrom (virStoragePoolPtr pool,
> + const char *xmldesc,
> + unsigned int flags,
> + virStorageVolPtr clonevol);
> int virStorageVolDelete (virStorageVolPtr vol,
> unsigned int flags);
> int virStorageVolRef (virStorageVolPtr vol);
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index 2f7076f..f5cadb4 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -1047,6 +1047,10 @@ const char* virStorageVolGetKey (virStorageVolPtr vol);
> virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
> const char *xmldesc,
> unsigned int flags);
> +virStorageVolPtr virStorageVolCreateXMLFrom (virStoragePoolPtr pool,
> + const char *xmldesc,
> + unsigned int flags,
> + virStorageVolPtr clonevol);
> int virStorageVolDelete (virStorageVolPtr vol,
> unsigned int flags);
> int virStorageVolRef (virStorageVolPtr vol);
> diff --git a/src/driver.h b/src/driver.h
> index c357b76..ff12ada 100644
> --- a/src/driver.h
> +++ b/src/driver.h
> @@ -586,6 +586,11 @@ typedef char *
> typedef char *
> (*virDrvStorageVolGetPath) (virStorageVolPtr vol);
>
> +typedef virStorageVolPtr
> + (*virDrvStorageVolCreateXMLFrom) (virStoragePoolPtr pool,
> + const char *xmldesc,
> + unsigned int flags,
> + virStorageVolPtr clone);
>
>
> typedef struct _virStorageDriver virStorageDriver;
> @@ -633,6 +638,7 @@ struct _virStorageDriver {
> virDrvStorageVolLookupByKey volLookupByKey;
> virDrvStorageVolLookupByPath volLookupByPath;
> virDrvStorageVolCreateXML volCreateXML;
> + virDrvStorageVolCreateXMLFrom volCreateXMLFrom;
> virDrvStorageVolDelete volDelete;
> virDrvStorageVolGetInfo volGetInfo;
> virDrvStorageVolGetXMLDesc volGetXMLDesc;
> diff --git a/src/libvirt.c b/src/libvirt.c
> index ded18a7..5a51c45 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -6767,6 +6767,65 @@ error:
>
>
> /**
> + * virStorageVolCreateXMLFrom:
> + * @pool: pointer to parent pool for the new volume
> + * @xmldesc: description of volume to create
> + * @flags: flags for creation (unused, pass 0)
> + * @clonevol: storage volume to use as input
> + *
> + * Create a storage volume in the parent pool, using the
> + * 'clonevol' volume as input. Information for the new
> + * volume (name, perms) are passed via a typical volume
> + * XML description.
> + *
> + * return the storage volume, or NULL on error
> + */
> +virStorageVolPtr
> +virStorageVolCreateXMLFrom(virStoragePoolPtr pool,
> + const char *xmldesc,
> + unsigned int flags,
> + virStorageVolPtr clonevol)
> +{
> + DEBUG("pool=%p, flags=%u, clonevol=%p", pool, flags, clonevol);
> +
> + virResetLastError();
> +
> + if (!VIR_IS_STORAGE_POOL(pool)) {
> + virLibConnError(NULL, VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
> + return (NULL);
> + }
> +
> + if (!VIR_IS_STORAGE_VOL(clonevol)) {
> + virLibConnError(NULL, VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
> + return (NULL);
> + }
> +
> + if (pool->conn->flags & VIR_CONNECT_RO ||
> + clonevol->conn->flags & VIR_CONNECT_RO) {
> + virLibConnError(pool->conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
> + goto error;
> + }
> +
> + if (pool->conn->storageDriver &&
> + pool->conn->storageDriver->volCreateXMLFrom) {
> + virStorageVolPtr ret;
> + ret = pool->conn->storageDriver->volCreateXMLFrom (pool, xmldesc,
> + flags, clonevol);
> + if (!ret)
> + goto error;
> + return ret;
> + }
> +
> + virLibConnError (pool->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +error:
> + /* Copy to connection error object for back compatability */
> + virSetConnError(pool->conn);
> + return NULL;
> +}
> +
> +
> +/**
> * virStorageVolDelete:
> * @vol: pointer to storage volume
> * @flags: future flags, use 0 for now
> @@ -7009,8 +7068,6 @@ error:
> }
>
>
> -
> -
> /**
> * virNodeNumOfDevices:
> * @conn: pointer to the hypervisor connection
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index b8f9128..0ea130f 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -265,3 +265,8 @@ LIBVIRT_0.6.3 {
> } LIBVIRT_0.6.1;
>
> # .... define new API here using predicted next version number ....
> +
> +LIBVIRT_0.6.4 {
> + global:
> + virStorageVolCreateXMLFrom;
> +} LIBVIRT_0.6.3;
> --
> 1.6.0.6
>
> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list