diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 6bc160de4a..ed63624cf6 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -992,10 +992,9 @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver *driver, bool releaseSeclabel = false; int ret = -1; - if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM || - disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) { + if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("cdrom/floppy device hotplug isn't supported")); + _("floppy device hotplug isn't supported")); return -1; } @@ -1025,6 +1024,10 @@ qemuDomainAttachDeviceDiskLiveInternal(virQEMUDriver *driver, break; case VIR_DOMAIN_DISK_BUS_VIRTIO: + if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("cdrom device with virtio bus isn't supported")); + } if (qemuDomainEnsureVirtioAddress(&releaseVirtio, vm, dev) < 0) goto cleanup; break; @@ -5413,6 +5416,12 @@ qemuDomainDetachPrepDisk(virDomainObj *vm, break; case VIR_DOMAIN_DISK_DEVICE_CDROM: + if (disk->bus == VIR_DOMAIN_DISK_BUS_USB || + disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) { + break; + } + G_GNUC_FALLTHROUGH; + case VIR_DOMAIN_DISK_DEVICE_FLOPPY: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("disk device type '%s' cannot be detached"), diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index e98d9845e8..3c9dac241a 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -860,6 +860,24 @@ mymain(void) DO_TEST_DETACH("base-live", "guestfwd", false, false, "netdev_del", QMP_OK); + DO_TEST_ATTACH("base-live", "cdrom-usb", false, true, + "human-monitor-command", HMP("OK\\r\\n"), + "device_add", QMP_OK); + DO_TEST_DETACH("base-live", "cdrom-usb", true, true, + "device_del", QMP_OK); + DO_TEST_DETACH("base-live", "cdrom-usb", false, false, + "device_del", QMP_DEVICE_DELETED("usb-disk4") QMP_OK, + "human-monitor-command", HMP("")); + + DO_TEST_ATTACH("base-live", "cdrom-scsi", false, true, + "human-monitor-command", HMP("OK\\r\\n"), + "device_add", QMP_OK); + DO_TEST_DETACH("base-live", "cdrom-scsi", true, true, + "device_del", QMP_OK); + DO_TEST_DETACH("base-live", "cdrom-scsi", false, false, + "device_del", QMP_DEVICE_DELETED("scsi0-0-0-4") QMP_OK, + "human-monitor-command", HMP("")); + #define DO_TEST_CPU_GROUP(prefix, vcpus, modernhp, expectfail) \ do { \ cpudata.test = prefix; \ diff --git a/tests/qemuhotplugtestdevices/qemuhotplug-cdrom-scsi.xml b/tests/qemuhotplugtestdevices/qemuhotplug-cdrom-scsi.xml new file mode 100644 index 0000000000..da8b94bb22 --- /dev/null +++ b/tests/qemuhotplugtestdevices/qemuhotplug-cdrom-scsi.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/tests/qemuhotplugtestdevices/qemuhotplug-cdrom-usb.xml b/tests/qemuhotplugtestdevices/qemuhotplug-cdrom-usb.xml new file mode 100644 index 0000000000..efb974090c --- /dev/null +++ b/tests/qemuhotplugtestdevices/qemuhotplug-cdrom-usb.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-live+cdrom-scsi.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+cdrom-scsi.xml new file mode 100644 index 0000000000..c3242a582f --- /dev/null +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+cdrom-scsi.xml @@ -0,0 +1,60 @@ + + hotplug + d091ea82-29e6-2e34-3005-f02617b36e87 + 4194304 + 4194304 + 4 + + hvm + + + + + + + + + destroy + restart + restart + + /usr/bin/qemu-system-x86_64 + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + + +
+ + + + + + + +