storage: Error out when attempting to vol-upload into a remote pool

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.
This commit is contained in:
Peter Krempa 2014-03-03 16:11:28 +01:00
parent e45c30ee69
commit 429bf2534c

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