On Mon, Jun 23, 2025 at 21:59:18 +0200, Peter Krempa via Devel wrote:
From: Akihiko Odaki <akihiko.odaki(a)daynix.com>
usb-storage is a compound device that automatically creates a USB mass
storage device and a SCSI device as its backend. Unfortunately it lacks
some configuration options that are usually present with a SCSI device,
and cannot represent CD-ROM in particular.
Replace usb-storage with usb-bot, which can be combined with a manually
created SCSI device. libvirt will configure the SCSI device in a way
identical with how QEMU does for usb-storage except that now it respects
a configuration option to represent CD-ROM.
Resolves:
https://gitlab.com/libvirt/libvirt/-/issues/368
Signed-off-by: Akihiko Odaki <akihiko.odaki(a)daynix.com>
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_alias.c | 20 ++++-
src/qemu/qemu_capabilities.c | 3 +-
src/qemu/qemu_command.c | 86 ++++++++++++++++---
src/qemu/qemu_command.h | 5 ++
src/qemu/qemu_hotplug.c | 18 ++++
src/qemu/qemu_validate.c | 38 ++++++--
tests/qemuhotplugtest.c | 4 +-
...om-usb-empty.x86_64-latest.abi-update.args | 3 +-
.../disk-usb-device-model.x86_64-latest.args | 6 +-
...k-usb-device.x86_64-latest.abi-update.args | 12 ++-
10 files changed, 167 insertions(+), 28 deletions(-)
diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
index 9d39ebd63d..67cbddd470 100644
--- a/src/qemu/qemu_alias.c
+++ b/src/qemu/qemu_alias.c
@@ -268,8 +268,24 @@ qemuAssignDeviceDiskAlias(virDomainDef *def,
break;
case VIR_DOMAIN_DISK_BUS_USB:
- diskPriv->qomName =
g_strdup_printf("/machine/peripheral/%s/%s.0/legacy[0]",
- disk->info.alias,
disk->info.alias);
+ switch (disk->model) {
+ case VIR_DOMAIN_DISK_MODEL_USB_STORAGE:
+ diskPriv->qomName =
g_strdup_printf("/machine/peripheral/%s/%s.0/legacy[0]",
+ disk->info.alias,
disk->info.alias);
+ break;
+
+ case VIR_DOMAIN_DISK_MODEL_USB_BOT:
+ diskPriv->qomName =
g_strdup_printf("/machine/peripheral/%s-disk",
I noticed that this is supposed to be "%s-device" to format the proper
qom name:
virsh qemu-monitor-command --pretty fedora41-mig query-block
{
"return": [
[...]
{
"io-status": "ok",
"device": "",
"locked": false,
"removable": false,
"inserted": {
"iops_rd": 0,
"detect_zeroes": "off",
"active": true,
"image": {
"virtual-size": 104857600,
"filename": "/tmp/img1",
"format": "file",
"actual-size": 104857600,
"format-specific": {
"type": "file",
"data": {}
},
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-6-storage",
"backing_file_depth": 0,
"drv": "file",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/img1"
},
"qdev": "usb-disk0-device",
^^^^^^^^^^^^^^^^
"type": "unknown"
},
[...]
I'll update it before pushing.