[libvirt] [PATCH v2 1/3] storage: add a flag for metadata preallocation to VolCreate
Peter Krempa
pkrempa at redhat.com
Wed Nov 28 14:28:58 UTC 2012
On 11/12/12 17:08, Ján Tomko wrote:
> ---
> include/libvirt/libvirt.h.in | 4 ++++
> src/libvirt.c | 4 ++--
> src/storage/storage_backend.h | 3 ++-
> src/storage/storage_backend_fs.c | 16 ++++++++++------
> src/storage/storage_driver.c | 6 +++---
> 5 files changed, 21 insertions(+), 12 deletions(-)
>
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index bf584a0..d41be3f 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -2900,6 +2900,10 @@ virStorageVolPtr virStorageVolLookupByPath (virConnectPtr conn,
> const char* virStorageVolGetName (virStorageVolPtr vol);
> const char* virStorageVolGetKey (virStorageVolPtr vol);
>
> +typedef enum {
> + VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA = 1 << 0,
> +} virStorageVolCreateFlags;
> +
> virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
> const char *xmldesc,
> unsigned int flags);
> diff --git a/src/libvirt.c b/src/libvirt.c
> index bdb1dc6..6f08d19 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -13299,7 +13299,7 @@ virStorageVolGetKey(virStorageVolPtr vol)
> * virStorageVolCreateXML:
> * @pool: pointer to storage pool
> * @xmlDesc: description of volume to create
> - * @flags: extra flags; not used yet, so callers should always pass 0
> + * @flags: bitwise-OR of virStorageVolCreateFlags
> *
> * Create a storage volume within a pool based
> * on an XML description. Not all pools support
> @@ -13350,7 +13350,7 @@ error:
> * @pool: pointer to parent pool for the new volume
> * @xmlDesc: description of volume to create
> * @clonevol: storage volume to use as input
> - * @flags: extra flags; not used yet, so callers should always pass 0
> + * @flags: bitwise-OR of virStorageVolCreateFlags
> *
> * Create a storage volume in the parent pool, using the
> * 'clonevol' volume as input. Information for the new
Here at the documentation for these APIs you should write up what the
new flag actually does when used.
> diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h
> index 29cad9d..c991015 100644
> --- a/src/storage/storage_backend.h
> +++ b/src/storage/storage_backend.h
> @@ -37,7 +37,8 @@ typedef int (*virStorageBackendStopPool)(virConnectPtr conn, virStoragePoolObjPt
> typedef int (*virStorageBackendDeletePool)(virConnectPtr conn, virStoragePoolObjPtr pool, unsigned int flags);
>
> typedef int (*virStorageBackendBuildVol)(virConnectPtr conn,
> - virStoragePoolObjPtr pool, virStorageVolDefPtr vol);
> + virStoragePoolObjPtr pool, virStorageVolDefPtr vol,
> + unsigned int flags);
> typedef int (*virStorageBackendCreateVol)(virConnectPtr conn, virStoragePoolObjPtr pool, virStorageVolDefPtr vol);
> typedef int (*virStorageBackendRefreshVol)(virConnectPtr conn, virStoragePoolObjPtr pool, virStorageVolDefPtr vol);
> typedef int (*virStorageBackendDeleteVol)(virConnectPtr conn, virStoragePoolObjPtr pool, virStorageVolDefPtr vol, unsigned int flags);
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 3322677..2a95174 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -1049,7 +1049,8 @@ static int
> _virStorageBackendFileSystemVolBuild(virConnectPtr conn,
> virStoragePoolObjPtr pool,
> virStorageVolDefPtr vol,
> - virStorageVolDefPtr inputvol)
> + virStorageVolDefPtr inputvol,
> + unsigned int flags)
> {
> virStorageBackendBuildVolFrom create_func;
> int tool_type;
> @@ -1082,7 +1083,7 @@ _virStorageBackendFileSystemVolBuild(virConnectPtr conn,
> return -1;
> }
>
> - if (create_func(conn, pool, vol, inputvol, 0) < 0)
> + if (create_func(conn, pool, vol, inputvol, flags) < 0)
> return -1;
> return 0;
> }
> @@ -1095,8 +1096,11 @@ _virStorageBackendFileSystemVolBuild(virConnectPtr conn,
> static int
> virStorageBackendFileSystemVolBuild(virConnectPtr conn,
> virStoragePoolObjPtr pool,
> - virStorageVolDefPtr vol) {
> - return _virStorageBackendFileSystemVolBuild(conn, pool, vol, NULL);
> + virStorageVolDefPtr vol,
> + unsigned int flags) {
> + virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, -1);
You shouldn't enable support of flags before the actual code that
implements them goes in.
> +
> + return _virStorageBackendFileSystemVolBuild(conn, pool, vol, NULL, flags);
> }
>
> /*
> @@ -1109,9 +1113,9 @@ virStorageBackendFileSystemVolBuildFrom(virConnectPtr conn,
> virStorageVolDefPtr inputvol,
> unsigned int flags)
> {
> - virCheckFlags(0, -1);
> + virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, -1);
Same here.
>
> - return _virStorageBackendFileSystemVolBuild(conn, pool, vol, inputvol);
> + return _virStorageBackendFileSystemVolBuild(conn, pool, vol, inputvol, flags);
> }
>
> /**
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index faca2a2..98037ee 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -1365,7 +1365,7 @@ storageVolumeCreateXML(virStoragePoolPtr obj,
> virStorageVolDefPtr voldef = NULL;
> virStorageVolPtr ret = NULL, volobj = NULL;
>
> - virCheckFlags(0, NULL);
> + virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL);
and here.
>
> storageDriverLock(driver);
> pool = virStoragePoolObjFindByUUID(&driver->pools, obj->uuid);
> @@ -1442,7 +1442,7 @@ storageVolumeCreateXML(virStoragePoolPtr obj,
> voldef->building = 1;
> virStoragePoolObjUnlock(pool);
>
> - buildret = backend->buildVol(obj->conn, pool, buildvoldef);
> + buildret = backend->buildVol(obj->conn, pool, buildvoldef, flags);
>
> storageDriverLock(driver);
> virStoragePoolObjLock(pool);
> @@ -1490,7 +1490,7 @@ storageVolumeCreateXMLFrom(virStoragePoolPtr obj,
> virStorageVolPtr ret = NULL, volobj = NULL;
> int buildret;
>
> - virCheckFlags(0, NULL);
> + virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL);
and here ...
>
> storageDriverLock(driver);
> pool = virStoragePoolObjFindByUUID(&driver->pools, obj->uuid);
>
More information about the libvir-list
mailing list