qemu: Assign managed PR path when preparing storage source
Rather than always checking which path to use pre-assign it when preparing storage source. This reduces the need to pass 'vm' around too much. For later use the path can be retrieved from the status XML. Signed-off-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
e31f490458
commit
b571e7bad0
@ -9717,7 +9717,6 @@ qemuBuildPanicCommandLine(virCommandPtr cmd,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* qemuBuildPRManagerInfoProps:
|
* qemuBuildPRManagerInfoProps:
|
||||||
* @vm: domain object
|
|
||||||
* @disk: disk definition
|
* @disk: disk definition
|
||||||
* @propsret: Returns JSON object containing properties of the pr-manager-helper object
|
* @propsret: Returns JSON object containing properties of the pr-manager-helper object
|
||||||
* @aliasret: alias of the pr-manager-helper object
|
* @aliasret: alias of the pr-manager-helper object
|
||||||
@ -9728,12 +9727,10 @@ qemuBuildPanicCommandLine(virCommandPtr cmd,
|
|||||||
* -1 on failure (with error message set).
|
* -1 on failure (with error message set).
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
qemuBuildPRManagerInfoProps(virDomainObjPtr vm,
|
qemuBuildPRManagerInfoProps(const virDomainDiskDef *disk,
|
||||||
const virDomainDiskDef *disk,
|
|
||||||
virJSONValuePtr *propsret,
|
virJSONValuePtr *propsret,
|
||||||
char **aliasret)
|
char **aliasret)
|
||||||
{
|
{
|
||||||
char *socketPath = NULL;
|
|
||||||
char *alias = NULL;
|
char *alias = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
@ -9743,9 +9740,6 @@ qemuBuildPRManagerInfoProps(virDomainObjPtr vm,
|
|||||||
if (!disk->src->pr)
|
if (!disk->src->pr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!(socketPath = qemuDomainGetPRSocketPath(vm, disk->src->pr)))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if (virStoragePRDefIsManaged(disk->src->pr)) {
|
if (virStoragePRDefIsManaged(disk->src->pr)) {
|
||||||
if (VIR_STRDUP(alias, qemuDomainGetManagedPRAlias()) < 0)
|
if (VIR_STRDUP(alias, qemuDomainGetManagedPRAlias()) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -9755,7 +9749,7 @@ qemuBuildPRManagerInfoProps(virDomainObjPtr vm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (virJSONValueObjectCreate(propsret,
|
if (virJSONValueObjectCreate(propsret,
|
||||||
"s:path", socketPath,
|
"s:path", disk->src->pr->path,
|
||||||
NULL) < 0)
|
NULL) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -9763,14 +9757,12 @@ qemuBuildPRManagerInfoProps(virDomainObjPtr vm,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(alias);
|
VIR_FREE(alias);
|
||||||
VIR_FREE(socketPath);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildMasterPRCommandLine(virDomainObjPtr vm,
|
qemuBuildMasterPRCommandLine(virCommandPtr cmd,
|
||||||
virCommandPtr cmd,
|
|
||||||
const virDomainDef *def)
|
const virDomainDef *def)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
@ -9790,7 +9782,7 @@ qemuBuildMasterPRCommandLine(virDomainObjPtr vm,
|
|||||||
managedAdded = true;
|
managedAdded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuBuildPRManagerInfoProps(vm, disk, &props, &alias) < 0)
|
if (qemuBuildPRManagerInfoProps(disk, &props, &alias) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!props)
|
if (!props)
|
||||||
@ -9984,7 +9976,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
|
|||||||
if (qemuBuildMasterKeyCommandLine(cmd, priv) < 0)
|
if (qemuBuildMasterKeyCommandLine(cmd, priv) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (qemuBuildMasterPRCommandLine(vm, cmd, def) < 0)
|
if (qemuBuildMasterPRCommandLine(cmd, def) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (enableFips)
|
if (enableFips)
|
||||||
|
@ -55,8 +55,7 @@ virCommandPtr qemuBuildCommandLine(virQEMUDriverPtr driver,
|
|||||||
int **nicindexes);
|
int **nicindexes);
|
||||||
|
|
||||||
/* Generate the object properties for pr-manager */
|
/* Generate the object properties for pr-manager */
|
||||||
int qemuBuildPRManagerInfoProps(virDomainObjPtr vm,
|
int qemuBuildPRManagerInfoProps(const virDomainDiskDef *disk,
|
||||||
const virDomainDiskDef *disk,
|
|
||||||
virJSONValuePtr *propsret,
|
virJSONValuePtr *propsret,
|
||||||
char **alias);
|
char **alias);
|
||||||
|
|
||||||
|
@ -11930,6 +11930,22 @@ qemuDomainPrepareDiskCachemode(virDomainDiskDefPtr disk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuDomainPrepareStorageSourcePR(virStorageSourcePtr src,
|
||||||
|
qemuDomainObjPrivatePtr priv)
|
||||||
|
{
|
||||||
|
if (!src->pr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (virStoragePRDefIsManaged(src->pr)) {
|
||||||
|
if (!(src->pr->path = qemuDomainGetManagedPRSocketPath(priv)))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
|
qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
|
||||||
qemuDomainObjPrivatePtr priv,
|
qemuDomainObjPrivatePtr priv,
|
||||||
@ -11946,6 +11962,9 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
|
|||||||
if (qemuDomainPrepareDiskSourceChain(disk, NULL, cfg, priv->qemuCaps) < 0)
|
if (qemuDomainPrepareDiskSourceChain(disk, NULL, cfg, priv->qemuCaps) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (qemuDomainPrepareStorageSourcePR(disk->src, priv) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12051,22 +12070,12 @@ qemuProcessEventFree(struct qemuProcessEvent *event)
|
|||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
qemuDomainGetPRSocketPath(virDomainObjPtr vm,
|
qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv)
|
||||||
virStoragePRDefPtr pr)
|
|
||||||
{
|
{
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
|
||||||
const char *defaultAlias = NULL;
|
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
if (!pr)
|
ignore_value(virAsprintf(&ret, "%s/%s.sock", priv->libDir,
|
||||||
return NULL;
|
qemuDomainGetManagedPRAlias()));
|
||||||
|
|
||||||
if (virStoragePRDefIsManaged(pr)) {
|
|
||||||
defaultAlias = qemuDomainGetManagedPRAlias();
|
|
||||||
ignore_value(virAsprintf(&ret, "%s/%s.sock", priv->libDir, defaultAlias));
|
|
||||||
} else {
|
|
||||||
ignore_value(VIR_STRDUP(ret, pr->path));
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1006,7 +1006,6 @@ qemuDomainDiskCachemodeFlags(int cachemode,
|
|||||||
bool *direct,
|
bool *direct,
|
||||||
bool *noflush);
|
bool *noflush);
|
||||||
|
|
||||||
char * qemuDomainGetPRSocketPath(virDomainObjPtr vm,
|
char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
|
||||||
virStoragePRDefPtr pr);
|
|
||||||
|
|
||||||
#endif /* __QEMU_DOMAIN_H__ */
|
#endif /* __QEMU_DOMAIN_H__ */
|
||||||
|
@ -401,7 +401,7 @@ qemuMaybeBuildPRManagerInfoProps(virDomainObjPtr vm,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return qemuBuildPRManagerInfoProps(vm, disk, propsret, aliasret);
|
return qemuBuildPRManagerInfoProps(disk, propsret, aliasret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2659,7 +2659,7 @@ qemuProcessStartPRDaemon(virDomainObjPtr vm,
|
|||||||
if ((pidfd = virPidFileAcquirePath(pidfile, false, -1)) < 0)
|
if ((pidfd = virPidFileAcquirePath(pidfile, false, -1)) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(socketPath = qemuDomainGetPRSocketPath(vm, disk->src->pr)))
|
if (!(socketPath = qemuDomainGetManagedPRSocketPath(priv)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Remove stale socket */
|
/* Remove stale socket */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user