[libvirt] [PATCH 5/8] storage: disk: Separate creating of the volume from building

Peter Krempa pkrempa at redhat.com
Mon Jan 6 16:44:54 UTC 2014


Separate the steps to create libvirt's volume metadata from the actual
volume building process.
---
 src/storage/storage_backend_disk.c | 44 ++++++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c
index a7a7d0e..aa3b72f 100644
--- a/src/storage/storage_backend_disk.c
+++ b/src/storage/storage_backend_disk.c
@@ -617,28 +617,43 @@ virStorageBackendDiskPartBoundries(virStoragePoolObjPtr pool,

 static int
 virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
-                               virStoragePoolObjPtr pool,
+                               virStoragePoolObjPtr pool ATTRIBUTE_UNUSED,
                                virStorageVolDefPtr vol)
 {
+    if (vol->target.encryption != NULL) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("storage pool does not support encrypted volumes"));
+        return -1;
+    }
+
+    vol->type = VIR_STORAGE_VOL_BLOCK;
+
+    return 0;
+}
+
+
+static int
+virStorageBackendDiskBuildVol(virConnectPtr conn ATTRIBUTE_UNUSED,
+                              virStoragePoolObjPtr pool,
+                              virStorageVolDefPtr vol,
+                              unsigned int flags)
+{
     int res = -1;
     char *partFormat = NULL;
     unsigned long long startOffset = 0, endOffset = 0;
-    virCommandPtr cmd = virCommandNewArgList(PARTED,
-                                             pool->def->source.devices[0].path,
-                                             "mkpart",
-                                             "--script",
-                                             NULL);
+    virCommandPtr cmd = NULL;

-    if (vol->target.encryption != NULL) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       "%s", _("storage pool does not support encrypted "
-                               "volumes"));
-        goto cleanup;
-    }
+    virCheckFlags(0, -1);
+
+    cmd = virCommandNewArgList(PARTED,
+                               pool->def->source.devices[0].path,
+                               "mkpart",
+                               "--script",
+                               NULL);

-    if (virStorageBackendDiskPartFormat(pool, vol, &partFormat) != 0) {
+    if (virStorageBackendDiskPartFormat(pool, vol, &partFormat) != 0)
         goto cleanup;
-    }
+
     virCommandAddArg(cmd, partFormat);

     if (virStorageBackendDiskPartBoundries(pool, &startOffset,
@@ -768,5 +783,6 @@ virStorageBackend virStorageBackendDisk = {

     .createVol = virStorageBackendDiskCreateVol,
     .deleteVol = virStorageBackendDiskDeleteVol,
+    .buildVol = virStorageBackendDiskBuildVol,
     .buildVolFrom = virStorageBackendDiskBuildVolFrom,
 };
-- 
1.8.5.2




More information about the libvir-list mailing list