mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu_domain.c: removing unneeded cleanup labels
Previous patches deprecated some 'cleanup' labels. Let's remove them. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
20fa2bc6e5
commit
db780004a9
@ -2034,42 +2034,41 @@ qemuDomainSecretPrepare(virQEMUDriverPtr driver,
|
|||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
size_t i;
|
size_t i;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
/* disk secrets are prepared when preparing disks */
|
/* disk secrets are prepared when preparing disks */
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nhostdevs; i++) {
|
for (i = 0; i < vm->def->nhostdevs; i++) {
|
||||||
if (qemuDomainSecretHostdevPrepare(priv,
|
if (qemuDomainSecretHostdevPrepare(priv,
|
||||||
vm->def->hostdevs[i]) < 0)
|
vm->def->hostdevs[i]) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nserials; i++) {
|
for (i = 0; i < vm->def->nserials; i++) {
|
||||||
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->serials[i]->info.alias,
|
vm->def->serials[i]->info.alias,
|
||||||
vm->def->serials[i]->source) < 0)
|
vm->def->serials[i]->source) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nparallels; i++) {
|
for (i = 0; i < vm->def->nparallels; i++) {
|
||||||
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->parallels[i]->info.alias,
|
vm->def->parallels[i]->info.alias,
|
||||||
vm->def->parallels[i]->source) < 0)
|
vm->def->parallels[i]->source) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nchannels; i++) {
|
for (i = 0; i < vm->def->nchannels; i++) {
|
||||||
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->channels[i]->info.alias,
|
vm->def->channels[i]->info.alias,
|
||||||
vm->def->channels[i]->source) < 0)
|
vm->def->channels[i]->source) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nconsoles; i++) {
|
for (i = 0; i < vm->def->nconsoles; i++) {
|
||||||
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->consoles[i]->info.alias,
|
vm->def->consoles[i]->info.alias,
|
||||||
vm->def->consoles[i]->source) < 0)
|
vm->def->consoles[i]->source) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nsmartcards; i++)
|
for (i = 0; i < vm->def->nsmartcards; i++)
|
||||||
@ -2078,32 +2077,29 @@ qemuDomainSecretPrepare(virQEMUDriverPtr driver,
|
|||||||
qemuDomainSecretChardevPrepare(cfg, priv,
|
qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->smartcards[i]->info.alias,
|
vm->def->smartcards[i]->info.alias,
|
||||||
vm->def->smartcards[i]->data.passthru) < 0)
|
vm->def->smartcards[i]->data.passthru) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nrngs; i++) {
|
for (i = 0; i < vm->def->nrngs; i++) {
|
||||||
if (vm->def->rngs[i]->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
|
if (vm->def->rngs[i]->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
|
||||||
qemuDomainSecretChardevPrepare(cfg, priv,
|
qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->rngs[i]->info.alias,
|
vm->def->rngs[i]->info.alias,
|
||||||
vm->def->rngs[i]->source.chardev) < 0)
|
vm->def->rngs[i]->source.chardev) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->nredirdevs; i++) {
|
for (i = 0; i < vm->def->nredirdevs; i++) {
|
||||||
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
if (qemuDomainSecretChardevPrepare(cfg, priv,
|
||||||
vm->def->redirdevs[i]->info.alias,
|
vm->def->redirdevs[i]->info.alias,
|
||||||
vm->def->redirdevs[i]->source) < 0)
|
vm->def->redirdevs[i]->source) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->ngraphics; i++) {
|
for (i = 0; i < vm->def->ngraphics; i++) {
|
||||||
if (qemuDomainSecretGraphicsPrepare(cfg, priv, vm->def->graphics[i]) < 0)
|
if (qemuDomainSecretGraphicsPrepare(cfg, priv, vm->def->graphics[i]) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2131,10 +2127,9 @@ qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
|
|||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
g_autofree char *domname = virDomainDefGetShortName(vm->def);
|
g_autofree char *domname = virDomainDefGetShortName(vm->def);
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (!domname)
|
if (!domname)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (!priv->libDir)
|
if (!priv->libDir)
|
||||||
priv->libDir = g_strdup_printf("%s/domain-%s", cfg->libDir, domname);
|
priv->libDir = g_strdup_printf("%s/domain-%s", cfg->libDir, domname);
|
||||||
@ -2143,9 +2138,7 @@ qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
|
|||||||
priv->channelTargetDir = g_strdup_printf("%s/domain-%s",
|
priv->channelTargetDir = g_strdup_printf("%s/domain-%s",
|
||||||
cfg->channelTargetDir, domname);
|
cfg->channelTargetDir, domname);
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2327,7 +2320,6 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
|
|||||||
qemuDomainStorageSourcePrivatePtr priv;
|
qemuDomainStorageSourcePrivatePtr priv;
|
||||||
g_autofree char *authalias = NULL;
|
g_autofree char *authalias = NULL;
|
||||||
g_autofree char *encalias = NULL;
|
g_autofree char *encalias = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
src->nodestorage = virXPathString("string(./nodenames/nodename[@type='storage']/@name)", ctxt);
|
src->nodestorage = virXPathString("string(./nodenames/nodename[@type='storage']/@name)", ctxt);
|
||||||
src->nodeformat = virXPathString("string(./nodenames/nodename[@type='format']/@name)", ctxt);
|
src->nodeformat = virXPathString("string(./nodenames/nodename[@type='format']/@name)", ctxt);
|
||||||
@ -2342,25 +2334,21 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
|
|||||||
if (authalias || encalias) {
|
if (authalias || encalias) {
|
||||||
if (!src->privateData &&
|
if (!src->privateData &&
|
||||||
!(src->privateData = qemuDomainStorageSourcePrivateNew()))
|
!(src->privateData = qemuDomainStorageSourcePrivateNew()))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
priv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
|
priv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
|
||||||
|
|
||||||
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
|
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
|
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0)
|
if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2482,28 +2470,24 @@ qemuDomainObjPrivateXMLFormatAutomaticPlacement(virBufferPtr buf,
|
|||||||
{
|
{
|
||||||
g_autofree char *nodeset = NULL;
|
g_autofree char *nodeset = NULL;
|
||||||
g_autofree char *cpuset = NULL;
|
g_autofree char *cpuset = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (!priv->autoNodeset && !priv->autoCpuset)
|
if (!priv->autoNodeset && !priv->autoCpuset)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (priv->autoNodeset &&
|
if (priv->autoNodeset &&
|
||||||
!((nodeset = virBitmapFormat(priv->autoNodeset))))
|
!((nodeset = virBitmapFormat(priv->autoNodeset))))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (priv->autoCpuset &&
|
if (priv->autoCpuset &&
|
||||||
!((cpuset = virBitmapFormat(priv->autoCpuset))))
|
!((cpuset = virBitmapFormat(priv->autoCpuset))))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
virBufferAddLit(buf, "<numad");
|
virBufferAddLit(buf, "<numad");
|
||||||
virBufferEscapeString(buf, " nodeset='%s'", nodeset);
|
virBufferEscapeString(buf, " nodeset='%s'", nodeset);
|
||||||
virBufferEscapeString(buf, " cpuset='%s'", cpuset);
|
virBufferEscapeString(buf, " cpuset='%s'", cpuset);
|
||||||
virBufferAddLit(buf, "/>\n");
|
virBufferAddLit(buf, "/>\n");
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3006,7 +2990,6 @@ qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node,
|
|||||||
g_autofree char *idstr = NULL;
|
g_autofree char *idstr = NULL;
|
||||||
g_autofree char *pidstr = NULL;
|
g_autofree char *pidstr = NULL;
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
idstr = virXMLPropString(node, "id");
|
idstr = virXMLPropString(node, "id");
|
||||||
|
|
||||||
@ -3014,26 +2997,23 @@ qemuDomainObjPrivateXMLParseVcpu(xmlNodePtr node,
|
|||||||
(virStrToLong_uip(idstr, NULL, 10, &idx) < 0)) {
|
(virStrToLong_uip(idstr, NULL, 10, &idx) < 0)) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("cannot parse vcpu index '%s'"), idstr);
|
_("cannot parse vcpu index '%s'"), idstr);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!(vcpu = virDomainDefGetVcpu(def, idx))) {
|
if (!(vcpu = virDomainDefGetVcpu(def, idx))) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("invalid vcpu index '%u'"), idx);
|
_("invalid vcpu index '%u'"), idx);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pidstr = virXMLPropString(node, "pid")))
|
if (!(pidstr = virXMLPropString(node, "pid")))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (virStrToLong_uip(pidstr, NULL, 10, &tmp) < 0)
|
if (virStrToLong_uip(pidstr, NULL, 10, &tmp) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = tmp;
|
QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = tmp;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3047,7 +3027,6 @@ qemuDomainObjPrivateXMLParseAutomaticPlacement(xmlXPathContextPtr ctxt,
|
|||||||
g_autofree char *cpuset = NULL;
|
g_autofree char *cpuset = NULL;
|
||||||
int nodesetSize = 0;
|
int nodesetSize = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
nodeset = virXPathString("string(./numad/@nodeset)", ctxt);
|
nodeset = virXPathString("string(./numad/@nodeset)", ctxt);
|
||||||
cpuset = virXPathString("string(./numad/@cpuset)", ctxt);
|
cpuset = virXPathString("string(./numad/@cpuset)", ctxt);
|
||||||
@ -3056,7 +3035,7 @@ qemuDomainObjPrivateXMLParseAutomaticPlacement(xmlXPathContextPtr ctxt,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!(caps = virQEMUDriverGetHostNUMACaps(driver)))
|
if (!(caps = virQEMUDriverGetHostNUMACaps(driver)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
/* Figure out how big the nodeset bitmap needs to be.
|
/* Figure out how big the nodeset bitmap needs to be.
|
||||||
* This is necessary because NUMA node IDs are not guaranteed to
|
* This is necessary because NUMA node IDs are not guaranteed to
|
||||||
@ -3069,24 +3048,20 @@ qemuDomainObjPrivateXMLParseAutomaticPlacement(xmlXPathContextPtr ctxt,
|
|||||||
|
|
||||||
if (nodeset &&
|
if (nodeset &&
|
||||||
virBitmapParse(nodeset, &priv->autoNodeset, nodesetSize) < 0)
|
virBitmapParse(nodeset, &priv->autoNodeset, nodesetSize) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (cpuset) {
|
if (cpuset) {
|
||||||
if (virBitmapParse(cpuset, &priv->autoCpuset, VIR_DOMAIN_CPUMASK_LEN) < 0)
|
if (virBitmapParse(cpuset, &priv->autoCpuset, VIR_DOMAIN_CPUMASK_LEN) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
/* autoNodeset is present in this case, since otherwise we wouldn't
|
/* autoNodeset is present in this case, since otherwise we wouldn't
|
||||||
* reach this code */
|
* reach this code */
|
||||||
if (!(priv->autoCpuset = virCapabilitiesHostNUMAGetCpus(caps,
|
if (!(priv->autoCpuset = virCapabilitiesHostNUMAGetCpus(caps,
|
||||||
priv->autoNodeset)))
|
priv->autoNodeset)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3403,7 +3378,6 @@ int
|
|||||||
qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
|
qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
|
||||||
virTristateBool *allowReboot)
|
virTristateBool *allowReboot)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
|
||||||
int val;
|
int val;
|
||||||
g_autofree char *valStr = NULL;
|
g_autofree char *valStr = NULL;
|
||||||
|
|
||||||
@ -3411,15 +3385,12 @@ qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
|
|||||||
if ((val = virTristateBoolTypeFromString(valStr)) < 0) {
|
if ((val = virTristateBoolTypeFromString(valStr)) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("invalid allowReboot value '%s'"), valStr);
|
_("invalid allowReboot value '%s'"), valStr);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
*allowReboot = val;
|
*allowReboot = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3486,10 +3457,9 @@ qemuDomainObjPrivateXMLParseJobNBD(virDomainObjPtr vm,
|
|||||||
g_autofree xmlNodePtr *nodes = NULL;
|
g_autofree xmlNodePtr *nodes = NULL;
|
||||||
size_t i;
|
size_t i;
|
||||||
int n;
|
int n;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if ((n = virXPathNodeSet("./disk[@migrating='yes']", ctxt, &nodes)) < 0)
|
if ((n = virXPathNodeSet("./disk[@migrating='yes']", ctxt, &nodes)) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) {
|
if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) {
|
||||||
@ -3508,15 +3478,12 @@ qemuDomainObjPrivateXMLParseJobNBD(virDomainObjPtr vm,
|
|||||||
if (qemuDomainObjPrivateXMLParseJobNBDSource(nodes[i], ctxt,
|
if (qemuDomainObjPrivateXMLParseJobNBDSource(nodes[i], ctxt,
|
||||||
disk,
|
disk,
|
||||||
priv->driver->xmlopt) < 0)
|
priv->driver->xmlopt) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3527,12 +3494,9 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm,
|
|||||||
{
|
{
|
||||||
VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||||
g_autofree char *tmp = NULL;
|
g_autofree char *tmp = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (!(ctxt->node = virXPathNode("./job[1]", ctxt))) {
|
if (!(ctxt->node = virXPathNode("./job[1]", ctxt)))
|
||||||
ret = 0;
|
return 0;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((tmp = virXPathString("string(@type)", ctxt))) {
|
if ((tmp = virXPathString("string(@type)", ctxt))) {
|
||||||
int type;
|
int type;
|
||||||
@ -3540,7 +3504,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm,
|
|||||||
if ((type = qemuDomainJobTypeFromString(tmp)) < 0) {
|
if ((type = qemuDomainJobTypeFromString(tmp)) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Unknown job type %s"), tmp);
|
_("Unknown job type %s"), tmp);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
VIR_FREE(tmp);
|
VIR_FREE(tmp);
|
||||||
priv->job.active = type;
|
priv->job.active = type;
|
||||||
@ -3552,7 +3516,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm,
|
|||||||
if ((async = qemuDomainAsyncJobTypeFromString(tmp)) < 0) {
|
if ((async = qemuDomainAsyncJobTypeFromString(tmp)) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Unknown async job type %s"), tmp);
|
_("Unknown async job type %s"), tmp);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
VIR_FREE(tmp);
|
VIR_FREE(tmp);
|
||||||
priv->job.asyncJob = async;
|
priv->job.asyncJob = async;
|
||||||
@ -3562,7 +3526,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm,
|
|||||||
if (priv->job.phase < 0) {
|
if (priv->job.phase < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Unknown job phase %s"), tmp);
|
_("Unknown job phase %s"), tmp);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
VIR_FREE(tmp);
|
VIR_FREE(tmp);
|
||||||
}
|
}
|
||||||
@ -3570,19 +3534,16 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm,
|
|||||||
|
|
||||||
if (virXPathULongHex("string(@flags)", ctxt, &priv->job.apiFlags) == -2) {
|
if (virXPathULongHex("string(@flags)", ctxt, &priv->job.apiFlags) == -2) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid job flags"));
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid job flags"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuDomainObjPrivateXMLParseJobNBD(vm, priv, ctxt) < 0)
|
if (qemuDomainObjPrivateXMLParseJobNBD(vm, priv, ctxt) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuMigrationParamsParse(ctxt, &priv->job.migParams) < 0)
|
if (qemuMigrationParamsParse(ctxt, &priv->job.migParams) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5664,32 +5625,31 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
virQEMUDriverPtr driver = opaque;
|
virQEMUDriverPtr driver = opaque;
|
||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
g_autoptr(virQEMUCaps) qemuCaps = NULL;
|
g_autoptr(virQEMUCaps) qemuCaps = NULL;
|
||||||
int ret = -1;
|
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
|
if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
|
||||||
def->emulator)))
|
def->emulator)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (def->os.type != VIR_DOMAIN_OSTYPE_HVM) {
|
if (def->os.type != VIR_DOMAIN_OSTYPE_HVM) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Emulator '%s' does not support os type '%s'"),
|
_("Emulator '%s' does not support os type '%s'"),
|
||||||
def->emulator, virDomainOSTypeToString(def->os.type));
|
def->emulator, virDomainOSTypeToString(def->os.type));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!virQEMUCapsIsArchSupported(qemuCaps, def->os.arch)) {
|
if (!virQEMUCapsIsArchSupported(qemuCaps, def->os.arch)) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Emulator '%s' does not support arch '%s'"),
|
_("Emulator '%s' does not support arch '%s'"),
|
||||||
def->emulator, virArchToString(def->os.arch));
|
def->emulator, virArchToString(def->os.arch));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!virQEMUCapsIsVirtTypeSupported(qemuCaps, def->virtType)) {
|
if (!virQEMUCapsIsVirtTypeSupported(qemuCaps, def->virtType)) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Emulator '%s' does not support virt type '%s'"),
|
_("Emulator '%s' does not support virt type '%s'"),
|
||||||
def->emulator, virDomainVirtTypeToString(def->virtType));
|
def->emulator, virDomainVirtTypeToString(def->virtType));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuCaps &&
|
if (qemuCaps &&
|
||||||
@ -5697,13 +5657,13 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Emulator '%s' does not support machine type '%s'"),
|
_("Emulator '%s' does not support machine type '%s'"),
|
||||||
def->emulator, def->os.machine);
|
def->emulator, def->os.machine);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (def->mem.min_guarantee) {
|
if (def->mem.min_guarantee) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("Parameter 'min_guarantee' not supported by QEMU."));
|
_("Parameter 'min_guarantee' not supported by QEMU."));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* On x86, UEFI requires ACPI */
|
/* On x86, UEFI requires ACPI */
|
||||||
@ -5713,7 +5673,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
|
def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("UEFI requires ACPI on this architecture"));
|
_("UEFI requires ACPI on this architecture"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* On aarch64, ACPI requires UEFI */
|
/* On aarch64, ACPI requires UEFI */
|
||||||
@ -5723,7 +5683,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
!virDomainDefHasOldStyleUEFI(def))) {
|
!virDomainDefHasOldStyleUEFI(def))) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("ACPI requires UEFI on this architecture"));
|
_("ACPI requires UEFI on this architecture"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (def->os.loader &&
|
if (def->os.loader &&
|
||||||
@ -5734,7 +5694,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
if (!qemuDomainIsQ35(def)) {
|
if (!qemuDomainIsQ35(def)) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("Secure boot is supported with q35 machine types only"));
|
_("Secure boot is supported with q35 machine types only"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now, technically it is possible to have secure boot on
|
/* Now, technically it is possible to have secure boot on
|
||||||
@ -5743,7 +5703,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
if (def->os.arch != VIR_ARCH_X86_64) {
|
if (def->os.arch != VIR_ARCH_X86_64) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("Secure boot is supported for x86_64 architecture only"));
|
_("Secure boot is supported for x86_64 architecture only"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SMM will be enabled by qemuFirmwareFillDomain() if needed. */
|
/* SMM will be enabled by qemuFirmwareFillDomain() if needed. */
|
||||||
@ -5751,7 +5711,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
def->features[VIR_DOMAIN_FEATURE_SMM] != VIR_TRISTATE_SWITCH_ON) {
|
def->features[VIR_DOMAIN_FEATURE_SMM] != VIR_TRISTATE_SWITCH_ON) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("Secure boot requires SMM feature enabled"));
|
_("Secure boot requires SMM feature enabled"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5759,7 +5719,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)) {
|
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("this QEMU does not support the 'genid' capability"));
|
_("this QEMU does not support the 'genid' capability"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Serial graphics adapter */
|
/* Serial graphics adapter */
|
||||||
@ -5767,23 +5727,23 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SGA)) {
|
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SGA)) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("qemu does not support SGA"));
|
_("qemu does not support SGA"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!def->nserials) {
|
if (!def->nserials) {
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("need at least one serial port to use SGA"));
|
_("need at least one serial port to use SGA"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuDomainDefValidateClockTimers(def, qemuCaps) < 0)
|
if (qemuDomainDefValidateClockTimers(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainDefValidatePM(def, qemuCaps) < 0)
|
if (qemuDomainDefValidatePM(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainDefValidateBoot(def, qemuCaps) < 0)
|
if (qemuDomainDefValidateBoot(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
/* QEMU 2.7 (detected via the availability of query-hotpluggable-cpus)
|
/* QEMU 2.7 (detected via the availability of query-hotpluggable-cpus)
|
||||||
* enforces stricter rules than previous versions when it comes to guest
|
* enforces stricter rules than previous versions when it comes to guest
|
||||||
@ -5800,7 +5760,7 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
if (topologycpus != virDomainDefGetVcpusMax(def)) {
|
if (topologycpus != virDomainDefGetVcpusMax(def)) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("CPU topology doesn't match maximum vcpu count"));
|
_("CPU topology doesn't match maximum vcpu count"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
numacpus = virDomainNumaGetCPUCountTotal(def->numa);
|
numacpus = virDomainNumaGetCPUCountTotal(def->numa);
|
||||||
@ -5818,12 +5778,12 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
_("vCPUs count must be a multiple of the vCPU "
|
_("vCPUs count must be a multiple of the vCPU "
|
||||||
"hotplug granularity (%u)"),
|
"hotplug granularity (%u)"),
|
||||||
granularity);
|
granularity);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuDomainValidateCpuCount(def, qemuCaps) < 0)
|
if (qemuDomainValidateCpuCount(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (ARCH_IS_X86(def->os.arch) &&
|
if (ARCH_IS_X86(def->os.arch) &&
|
||||||
virDomainDefGetVcpusMax(def) > QEMU_MAX_VCPUS_WITHOUT_EIM) {
|
virDomainDefGetVcpusMax(def) > QEMU_MAX_VCPUS_WITHOUT_EIM) {
|
||||||
@ -5832,14 +5792,14 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
_("more than %d vCPUs are only supported on "
|
_("more than %d vCPUs are only supported on "
|
||||||
"q35-based machine types"),
|
"q35-based machine types"),
|
||||||
QEMU_MAX_VCPUS_WITHOUT_EIM);
|
QEMU_MAX_VCPUS_WITHOUT_EIM);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!def->iommu || def->iommu->eim != VIR_TRISTATE_SWITCH_ON) {
|
if (!def->iommu || def->iommu->eim != VIR_TRISTATE_SWITCH_ON) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("more than %d vCPUs require extended interrupt "
|
_("more than %d vCPUs require extended interrupt "
|
||||||
"mode enabled on the iommu device"),
|
"mode enabled on the iommu device"),
|
||||||
QEMU_MAX_VCPUS_WITHOUT_EIM);
|
QEMU_MAX_VCPUS_WITHOUT_EIM);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5847,20 +5807,20 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
def->virtType != VIR_DOMAIN_VIRT_KVM) {
|
def->virtType != VIR_DOMAIN_VIRT_KVM) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("cachetune is only supported for KVM domains"));
|
_("cachetune is only supported for KVM domains"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuDomainDefValidateFeatures(def, qemuCaps) < 0)
|
if (qemuDomainDefValidateFeatures(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainDefValidateMemory(def, qemuCaps) < 0)
|
if (qemuDomainDefValidateMemory(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainDefValidateNuma(def, qemuCaps) < 0)
|
if (qemuDomainDefValidateNuma(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainDefValidateConsole(def, qemuCaps) < 0)
|
if (qemuDomainDefValidateConsole(def, qemuCaps) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (cfg->vncTLS && cfg->vncTLSx509secretUUID &&
|
if (cfg->vncTLS && cfg->vncTLSx509secretUUID &&
|
||||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_TLS_CREDS_X509)) {
|
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_TLS_CREDS_X509)) {
|
||||||
@ -5869,15 +5829,12 @@ qemuDomainDefValidate(const virDomainDef *def,
|
|||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("encrypted VNC TLS keys are not supported with "
|
_("encrypted VNC TLS keys are not supported with "
|
||||||
"this QEMU binary"));
|
"this QEMU binary"));
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -8881,7 +8838,6 @@ qemuDomainDeviceDiskDefPostParseRestoreSecAlias(virDomainDiskDefPtr disk,
|
|||||||
bool restoreEncSecret = false;
|
bool restoreEncSecret = false;
|
||||||
g_autofree char *authalias = NULL;
|
g_autofree char *authalias = NULL;
|
||||||
g_autofree char *encalias = NULL;
|
g_autofree char *encalias = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (!(parseFlags & VIR_DOMAIN_DEF_PARSE_STATUS) ||
|
if (!(parseFlags & VIR_DOMAIN_DEF_PARSE_STATUS) ||
|
||||||
!qemuCaps ||
|
!qemuCaps ||
|
||||||
@ -8921,24 +8877,21 @@ qemuDomainDeviceDiskDefPostParseRestoreSecAlias(virDomainDiskDefPtr disk,
|
|||||||
|
|
||||||
if (restoreAuthSecret) {
|
if (restoreAuthSecret) {
|
||||||
if (!(authalias = qemuDomainGetSecretAESAlias(disk->info.alias, false)))
|
if (!(authalias = qemuDomainGetSecretAESAlias(disk->info.alias, false)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
|
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (restoreEncSecret) {
|
if (restoreEncSecret) {
|
||||||
if (!(encalias = qemuDomainGetSecretAESAlias(disk->info.alias, true)))
|
if (!(encalias = qemuDomainGetSecretAESAlias(disk->info.alias, true)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
|
if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -10450,10 +10403,10 @@ qemuDomainLogContextPtr qemuDomainLogContextNew(virQEMUDriverPtr driver,
|
|||||||
qemuDomainLogContextPtr ctxt = NULL;
|
qemuDomainLogContextPtr ctxt = NULL;
|
||||||
|
|
||||||
if (qemuDomainInitialize() < 0)
|
if (qemuDomainInitialize() < 0)
|
||||||
goto cleanup;
|
return NULL;
|
||||||
|
|
||||||
if (!(ctxt = virObjectNew(qemuDomainLogContextClass)))
|
if (!(ctxt = virObjectNew(qemuDomainLogContextClass)))
|
||||||
goto cleanup;
|
return NULL;
|
||||||
|
|
||||||
VIR_DEBUG("Context new %p stdioLogD=%d", ctxt, cfg->stdioLogD);
|
VIR_DEBUG("Context new %p stdioLogD=%d", ctxt, cfg->stdioLogD);
|
||||||
ctxt->writefd = -1;
|
ctxt->writefd = -1;
|
||||||
@ -10519,13 +10472,11 @@ qemuDomainLogContextPtr qemuDomainLogContextNew(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ctxt;
|
return ctxt;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
virObjectUnref(ctxt);
|
virObjectUnref(ctxt);
|
||||||
ctxt = NULL;
|
return NULL;
|
||||||
goto cleanup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -10709,7 +10660,6 @@ qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
|
|||||||
const char *snapshotDir)
|
const char *snapshotDir)
|
||||||
{
|
{
|
||||||
g_autofree char *newxml = NULL;
|
g_autofree char *newxml = NULL;
|
||||||
int ret = -1;
|
|
||||||
g_autofree char *snapDir = NULL;
|
g_autofree char *snapDir = NULL;
|
||||||
g_autofree char *snapFile = NULL;
|
g_autofree char *snapFile = NULL;
|
||||||
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||||
@ -10728,15 +10678,12 @@ qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
|
|||||||
if (virFileMakePath(snapDir) < 0) {
|
if (virFileMakePath(snapDir) < 0) {
|
||||||
virReportSystemError(errno, _("cannot create snapshot directory '%s'"),
|
virReportSystemError(errno, _("cannot create snapshot directory '%s'"),
|
||||||
snapDir);
|
snapDir);
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
snapFile = g_strdup_printf("%s/%s.xml", snapDir, def->parent.name);
|
snapFile = g_strdup_printf("%s/%s.xml", snapDir, def->parent.name);
|
||||||
|
|
||||||
ret = virXMLSaveFile(snapFile, NULL, "snapshot-edit", newxml);
|
return virXMLSaveFile(snapFile, NULL, "snapshot-edit", newxml);
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -10841,7 +10788,6 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
|
|||||||
bool metadata_only)
|
bool metadata_only)
|
||||||
{
|
{
|
||||||
g_autofree char *snapFile = NULL;
|
g_autofree char *snapFile = NULL;
|
||||||
int ret = -1;
|
|
||||||
qemuDomainObjPrivatePtr priv;
|
qemuDomainObjPrivatePtr priv;
|
||||||
virDomainMomentObjPtr parentsnap = NULL;
|
virDomainMomentObjPtr parentsnap = NULL;
|
||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
@ -10851,7 +10797,7 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
|
|||||||
/* Ignore any skipped disks */
|
/* Ignore any skipped disks */
|
||||||
if (qemuDomainSnapshotForEachQcow2(driver, vm, snap, "-d",
|
if (qemuDomainSnapshotForEachQcow2(driver, vm, snap, "-d",
|
||||||
true) < 0)
|
true) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
priv = vm->privateData;
|
priv = vm->privateData;
|
||||||
qemuDomainObjEnterMonitor(driver, vm);
|
qemuDomainObjEnterMonitor(driver, vm);
|
||||||
@ -10891,10 +10837,7 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
|
|||||||
virDomainMomentDropParent(snap);
|
virDomainMomentDropParent(snap);
|
||||||
virDomainSnapshotObjListRemove(vm->snapshots, snap);
|
virDomainSnapshotObjListRemove(vm->snapshots, snap);
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hash iterator callback to discard multiple snapshots. */
|
/* Hash iterator callback to discard multiple snapshots. */
|
||||||
@ -11275,17 +11218,13 @@ qemuDomainStorageFileInit(virQEMUDriverPtr driver,
|
|||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
gid_t gid;
|
gid_t gid;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
qemuDomainGetImageIds(cfg, vm, src, parent, &uid, &gid);
|
qemuDomainGetImageIds(cfg, vm, src, parent, &uid, &gid);
|
||||||
|
|
||||||
if (virStorageFileInitAs(src, uid, gid) < 0)
|
if (virStorageFileInitAs(src, uid, gid) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -14442,7 +14381,6 @@ qemuDomainSetupDev(virQEMUDriverConfigPtr cfg,
|
|||||||
{
|
{
|
||||||
g_autofree char *mount_options = NULL;
|
g_autofree char *mount_options = NULL;
|
||||||
g_autofree char *opts = NULL;
|
g_autofree char *opts = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
VIR_DEBUG("Setting up /dev/ for domain %s", vm->def->name);
|
VIR_DEBUG("Setting up /dev/ for domain %s", vm->def->name);
|
||||||
|
|
||||||
@ -14458,14 +14396,12 @@ qemuDomainSetupDev(virQEMUDriverConfigPtr cfg,
|
|||||||
opts = g_strdup_printf("mode=755,size=65536%s", mount_options);
|
opts = g_strdup_printf("mode=755,size=65536%s", mount_options);
|
||||||
|
|
||||||
if (virFileSetupDev(data->path, opts) < 0)
|
if (virFileSetupDev(data->path, opts) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainPopulateDevices(cfg, vm, data) < 0)
|
if (qemuDomainPopulateDevices(cfg, vm, data) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -14476,7 +14412,6 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED,
|
|||||||
{
|
{
|
||||||
virStorageSourcePtr next;
|
virStorageSourcePtr next;
|
||||||
bool hasNVMe = false;
|
bool hasNVMe = false;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
for (next = disk->src; virStorageSourceIsBacking(next); next = next->backingStore) {
|
for (next = disk->src; virStorageSourceIsBacking(next); next = next->backingStore) {
|
||||||
if (next->type == VIR_STORAGE_TYPE_NVME) {
|
if (next->type == VIR_STORAGE_TYPE_NVME) {
|
||||||
@ -14485,10 +14420,10 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED,
|
|||||||
hasNVMe = true;
|
hasNVMe = true;
|
||||||
|
|
||||||
if (!(nvmePath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
|
if (!(nvmePath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuDomainCreateDevice(nvmePath, data, false) < 0)
|
if (qemuDomainCreateDevice(nvmePath, data, false) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
if (!next->path || !virStorageSourceIsLocalStorage(next)) {
|
if (!next->path || !virStorageSourceIsLocalStorage(next)) {
|
||||||
/* Not creating device. Just continue. */
|
/* Not creating device. Just continue. */
|
||||||
@ -14496,22 +14431,20 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (qemuDomainCreateDevice(next->path, data, false) < 0)
|
if (qemuDomainCreateDevice(next->path, data, false) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* qemu-pr-helper might require access to /dev/mapper/control. */
|
/* qemu-pr-helper might require access to /dev/mapper/control. */
|
||||||
if (disk->src->pr &&
|
if (disk->src->pr &&
|
||||||
qemuDomainCreateDevice(QEMU_DEVICE_MAPPER_CONTROL_PATH, data, true) < 0)
|
qemuDomainCreateDevice(QEMU_DEVICE_MAPPER_CONTROL_PATH, data, true) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (hasNVMe &&
|
if (hasNVMe &&
|
||||||
qemuDomainCreateDevice(QEMU_DEV_VFIO, data, false) < 0)
|
qemuDomainCreateDevice(QEMU_DEV_VFIO, data, false) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -14997,15 +14930,12 @@ qemuDomainCreateNamespace(virQEMUDriverPtr driver,
|
|||||||
virDomainObjPtr vm)
|
virDomainObjPtr vm)
|
||||||
{
|
{
|
||||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (virBitmapIsBitSet(cfg->namespaces, QEMU_DOMAIN_NS_MOUNT) &&
|
if (virBitmapIsBitSet(cfg->namespaces, QEMU_DOMAIN_NS_MOUNT) &&
|
||||||
qemuDomainEnableNamespace(vm, QEMU_DOMAIN_NS_MOUNT) < 0)
|
qemuDomainEnableNamespace(vm, QEMU_DOMAIN_NS_MOUNT) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
cleanup:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -15884,7 +15814,7 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
|
|||||||
if (!disk) {
|
if (!disk) {
|
||||||
virReportError(VIR_ERR_INVALID_ARG,
|
virReportError(VIR_ERR_INVALID_ARG,
|
||||||
_("failed to find disk '%s'"), target);
|
_("failed to find disk '%s'"), target);
|
||||||
goto cleanup;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx == 0)
|
if (idx == 0)
|
||||||
@ -15892,7 +15822,6 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
|
|||||||
else
|
else
|
||||||
src = virStorageFileChainLookup(disk->src, NULL, NULL, idx, NULL);
|
src = virStorageFileChainLookup(disk->src, NULL, NULL, idx, NULL);
|
||||||
|
|
||||||
cleanup:
|
|
||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user