提交 af1fb38f 编写于 作者: P Peter Krempa

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.
上级 7de04882
...@@ -702,32 +702,16 @@ cleanup: ...@@ -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, ...@@ -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, ...@@ -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 = { ...@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册