提交 d9fc08d1 编写于 作者: J Ján Tomko

vmx: do not treat controllers as implicit devices

When parsing the config, we look for the SCSI controllers one by one,
remembering their models, then let virDomainDefAddImplicitDevices
add them if any SCSI disk is using them.

Since these controllers are not really implicit (they are present
in the source config), add them explicitly.

This patch maintains the behavior of not adding a controller
if it was present in the config, but no disk was using it.

This also resolves the memory leak of virVMXParseConfig overwriting
the video device added by calling virDomainDefAddImplicitDevices
before the parsing is finished.
Reported-by: NMichal Privoznik <mprivozn@redhat.com>
上级 c22f02cf
...@@ -1650,6 +1650,18 @@ virVMXParseConfig(virVMXContext *ctx, ...@@ -1650,6 +1650,18 @@ virVMXParseConfig(virVMXContext *ctx,
if (def->disks[def->ndisks] != NULL) if (def->disks[def->ndisks] != NULL)
++def->ndisks; ++def->ndisks;
} }
}
/* add all the SCSI controllers we've seen, up until the last one that is
* currently used by a disk */
if (def->ndisks != 0) {
virDomainDeviceInfoPtr info = &def->disks[def->ndisks - 1]->info;
for (controller = 0; controller <= info->addr.drive.controller; controller++) {
if (!virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
controller, scsi_virtualDev[controller]))
goto cleanup;
}
} }
/* def:disks (ide) */ /* def:disks (ide) */
...@@ -1689,26 +1701,6 @@ virVMXParseConfig(virVMXContext *ctx, ...@@ -1689,26 +1701,6 @@ virVMXParseConfig(virVMXContext *ctx,
++def->ndisks; ++def->ndisks;
} }
/* def:controllers */
if (virDomainDefAddImplicitDevices(def) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not add controllers"));
goto cleanup;
}
for (controller = 0; controller < def->ncontrollers; ++controller) {
if (def->controllers[controller]->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
if (def->controllers[controller]->idx > 3) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("SCSI controller index %d out of [0..3] range"),
def->controllers[controller]->idx);
goto cleanup;
}
def->controllers[controller]->model =
scsi_virtualDev[def->controllers[controller]->idx];
}
}
/* def:fss */ /* def:fss */
if (virVMXGetConfigBoolean(conf, "isolation.tools.hgfs.disable", if (virVMXGetConfigBoolean(conf, "isolation.tools.hgfs.disable",
&hgfs_disabled, true, true) < 0) { &hgfs_disabled, true, true) < 0) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册