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);