static int
-virStorageBackendLogicalBuildVol(virConnectPtr conn,
- virStoragePoolObjPtr pool,
- virStorageVolDefPtr vol,
- unsigned int flags)
+virStorageBackendLogicalCreateVol(virConnectPtr conn,
+ virStoragePoolObjPtr pool,
+ virStorageVolDefPtr vol)
{
int fd = -1;
virCommandPtr cmd = NULL;
virErrorPtr err;
- virCheckFlags(0, -1);
+ 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;
+
+ if (vol->target.path != NULL) {
+ /* A target path passed to CreateVol has no meaning */
+ VIR_FREE(vol->target.path);
+ }
+
+ if (virAsprintf(&vol->target.path, "%s/%s",
+ pool->def->target.path,
+ vol->name) == -1)
+ return -1;
cmd = virCommandNewArgList(LVCREATE,
"--name", vol->name,
return 0;
-error:
+ error:
err = virSaveLastError();
VIR_FORCE_CLOSE(fd);
virStorageBackendLogicalDeleteVol(conn, pool, vol, 0);
return -1;
}
-
-static int
-virStorageBackendLogicalCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
- virStoragePoolObjPtr pool,
- 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;
-
- VIR_FREE(vol->target.path);
- if (virAsprintf(&vol->target.path, "%s/%s",
- pool->def->target.path,
- vol->name) == -1)
- return -1;
-
- if (virFileExists(vol->target.path)) {
- virReportError(VIR_ERR_OPERATION_INVALID,
- _("volume target path '%s' already exists"),
- vol->target.path);
- return -1;
- }
-
- return 0;
-}
-
static int
virStorageBackendLogicalBuildVolFrom(virConnectPtr conn,
virStoragePoolObjPtr pool,
.refreshPool = virStorageBackendLogicalRefreshPool,
.stopPool = virStorageBackendLogicalStopPool,
.deletePool = virStorageBackendLogicalDeletePool,
- .buildVol = virStorageBackendLogicalBuildVol,
+ .buildVol = NULL,
.buildVolFrom = virStorageBackendLogicalBuildVolFrom,
.createVol = virStorageBackendLogicalCreateVol,
.deleteVol = virStorageBackendLogicalDeleteVol,