mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 14:15:28 +00:00
storage: lvm: Separate creating of the volume from building
Separate the steps to create libvirt's volume metadata from the actual volume building process. This is already done for regular file based pools to allow job support for storage APIs.
This commit is contained in:
parent
7de048829a
commit
af1fb38f55
@ -702,32 +702,16 @@ cleanup:
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virStorageBackendLogicalCreateVol(virConnectPtr conn,
|
virStorageBackendLogicalBuildVol(virConnectPtr conn,
|
||||||
virStoragePoolObjPtr pool,
|
virStoragePoolObjPtr pool,
|
||||||
virStorageVolDefPtr vol)
|
virStorageVolDefPtr vol,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
virCommandPtr cmd = NULL;
|
virCommandPtr cmd = NULL;
|
||||||
virErrorPtr err;
|
virErrorPtr err;
|
||||||
|
|
||||||
if (vol->target.encryption != NULL) {
|
virCheckFlags(0, -1);
|
||||||
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,
|
cmd = virCommandNewArgList(LVCREATE,
|
||||||
"--name", vol->name,
|
"--name", vol->name,
|
||||||
@ -786,7 +770,7 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
err = virSaveLastError();
|
err = virSaveLastError();
|
||||||
VIR_FORCE_CLOSE(fd);
|
VIR_FORCE_CLOSE(fd);
|
||||||
virStorageBackendLogicalDeleteVol(conn, pool, vol, 0);
|
virStorageBackendLogicalDeleteVol(conn, pool, vol, 0);
|
||||||
@ -796,6 +780,36 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
|
|||||||
return -1;
|
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
|
static int
|
||||||
virStorageBackendLogicalBuildVolFrom(virConnectPtr conn,
|
virStorageBackendLogicalBuildVolFrom(virConnectPtr conn,
|
||||||
virStoragePoolObjPtr pool,
|
virStoragePoolObjPtr pool,
|
||||||
@ -823,7 +837,7 @@ virStorageBackend virStorageBackendLogical = {
|
|||||||
.refreshPool = virStorageBackendLogicalRefreshPool,
|
.refreshPool = virStorageBackendLogicalRefreshPool,
|
||||||
.stopPool = virStorageBackendLogicalStopPool,
|
.stopPool = virStorageBackendLogicalStopPool,
|
||||||
.deletePool = virStorageBackendLogicalDeletePool,
|
.deletePool = virStorageBackendLogicalDeletePool,
|
||||||
.buildVol = NULL,
|
.buildVol = virStorageBackendLogicalBuildVol,
|
||||||
.buildVolFrom = virStorageBackendLogicalBuildVolFrom,
|
.buildVolFrom = virStorageBackendLogicalBuildVolFrom,
|
||||||
.createVol = virStorageBackendLogicalCreateVol,
|
.createVol = virStorageBackendLogicalCreateVol,
|
||||||
.deleteVol = virStorageBackendLogicalDeleteVol,
|
.deleteVol = virStorageBackendLogicalDeleteVol,
|
||||||
|
Loading…
Reference in New Issue
Block a user