[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH v2 1/3] storage: add a flag for metadata preallocation to VolCreate



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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]