Recently, patches were added support for (managed)saving, restoring, and
migrating domains with host USB devices. However, qemu driver would
still forbid migration of such domains because qemuMigrationIsAllowed
was not updated.
---
src/qemu/qemu_migration.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 65cd6ec..a2402ce 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -800,6 +800,8 @@ qemuMigrationIsAllowed(struct qemud_driver *driver, virDomainObjPtr
vm,
virDomainDefPtr def)
{
int nsnapshots;
+ bool forbid;
+ int i;
if (vm) {
if (qemuProcessAutoDestroyActive(driver, vm)) {
@@ -817,9 +819,23 @@ qemuMigrationIsAllowed(struct qemud_driver *driver, virDomainObjPtr
vm,
def = vm->def;
}
- if (def->nhostdevs > 0) {
- virReportError(VIR_ERR_OPERATION_INVALID,
- "%s", _("Domain with assigned host devices cannot
be migrated"));
+
+ /* Migration with USB host devices is allowed, all other devices are
+ * forbidden.
+ */
+ forbid = false;
+ for (i = 0; i < def->nhostdevs; i++) {
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+ if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
+ hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
+ forbid = true;
+ break;
+ }
+ }
+ if (forbid) {
+ virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("Domain with assigned non-USB host devices "
+ "cannot be migrated"));
return false;
}
--
1.7.12.4