[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