]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: Error out when attempting to vol-upload into a remote pool
authorPeter Krempa <pkrempa@redhat.com>
Mon, 3 Mar 2014 15:11:28 +0000 (16:11 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 5 Mar 2014 08:08:32 +0000 (09:08 +0100)
Pools that are not backed by files in the filesystem cause problems with
some APIs. Error out when attempting to upload a volume in such a pool
as currently we expect a local file representation for it.

src/storage/storage_driver.c

index 942ba3585ca19a6a7585306366e13967d8a799f2..79beb45b4914ac21d16c79e3db3615c888d83bbb 100644 (file)
@@ -2003,13 +2003,32 @@ storageVolUpload(virStorageVolPtr obj,
         goto cleanup;
     }
 
-    /* Not using O_CREAT because the file is required to
-     * already exist at this point */
-    if (virFDStreamOpenFile(stream,
-                            vol->target.path,
-                            offset, length,
-                            O_WRONLY) < 0)
+    switch ((enum virStoragePoolType) pool->def->type) {
+    case VIR_STORAGE_POOL_DIR:
+    case VIR_STORAGE_POOL_FS:
+    case VIR_STORAGE_POOL_NETFS:
+    case VIR_STORAGE_POOL_LOGICAL:
+    case VIR_STORAGE_POOL_DISK:
+    case VIR_STORAGE_POOL_ISCSI:
+    case VIR_STORAGE_POOL_SCSI:
+    case VIR_STORAGE_POOL_MPATH:
+        /* Not using O_CREAT because the file is required to already exist at
+         * this point */
+        if (virFDStreamOpenFile(stream, vol->target.path,
+                                offset, length, O_WRONLY) < 0)
+            goto cleanup;
+
+        break;
+
+    case VIR_STORAGE_POOL_SHEEPDOG:
+    case VIR_STORAGE_POOL_RBD:
+    case VIR_STORAGE_POOL_GLUSTER:
+    case VIR_STORAGE_POOL_LAST:
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                       _("volume upload is not supported with pools of type %s"),
+                       virStoragePoolTypeToString(pool->def->type));
         goto cleanup;
+    }
 
     ret = 0;