qemu: Support removable for scsi disk

Allow //disk/target@removable for scsi disk devices, since QEMU has support
the removable attribute for scsi-hd device from v0.14.0[1].

[1]: 419e691f8e: scsi-disk: Allow overriding SCSI INQUIRY removable bit

Signed-off-by: Han Han <hhan@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Han Han 2023-06-05 13:07:29 +08:00 committed by Michal Privoznik
parent 5f7f6ceb47
commit 1ed695bcff
6 changed files with 24 additions and 11 deletions

View File

@ -3094,7 +3094,7 @@ paravirtualized driver is specified via the ``disk`` element.
CDROM or Floppy disk), the value can be either "open" or "closed", defaults CDROM or Floppy disk), the value can be either "open" or "closed", defaults
to "closed". NB, the value of ``tray`` could be updated while the domain is to "closed". NB, the value of ``tray`` could be updated while the domain is
running. The optional attribute ``removable`` sets the removable flag for USB running. The optional attribute ``removable`` sets the removable flag for USB
disks, and its value can be either "on" or "off", defaulting to "off". or SCSI disks, and its value can be either "on" or "off", defaulting to "off".
The optional attribute ``rotation_rate`` sets the rotation rate of the The optional attribute ``rotation_rate`` sets the rotation rate of the
storage for disks on a SCSI, IDE, or SATA bus. Values in the range 1025 to storage for disks on a SCSI, IDE, or SATA bus. Values in the range 1025 to
65534 are used to indicate rotational media speed in revolutions per minute. 65534 are used to indicate rotational media speed in revolutions per minute.

View File

@ -881,9 +881,11 @@ virDomainDiskDefValidate(const virDomainDef *def,
} }
if (disk->removable != VIR_TRISTATE_SWITCH_ABSENT && if (disk->removable != VIR_TRISTATE_SWITCH_ABSENT &&
disk->bus != VIR_DOMAIN_DISK_BUS_USB) { disk->bus != VIR_DOMAIN_DISK_BUS_USB &&
!(disk->bus == VIR_DOMAIN_DISK_BUS_SCSI &&
disk->device == VIR_DOMAIN_DISK_DEVICE_DISK)) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("removable is only valid for usb disks")); _("removable is only valid for usb or scsi disks"));
return -1; return -1;
} }

View File

@ -1782,10 +1782,12 @@ qemuBuildDiskDeviceProps(const virDomainDef *def,
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) { if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
driver = "scsi-block"; driver = "scsi-block";
} else { } else {
if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
driver = "scsi-cd"; driver = "scsi-cd";
else } else {
driver = "scsi-hd"; driver = "scsi-hd";
removable = disk->removable;
}
/* qemu historically used the name of -drive as one of the device /* qemu historically used the name of -drive as one of the device
* ids in the Vital Product Data Device Identification page if * ids in the Vital Product Data Device Identification page if

View File

@ -27,13 +27,17 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
-no-shutdown \ -no-shutdown \
-boot strict=on \ -boot strict=on \
-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ -device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \ -device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.0","addr":"0x2"}' \
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw","file":"libvirt-3-storage"}' \
-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-3-format","id":"ide0-0-0","bootindex":1}' \
-blockdev '{"driver":"file","filename":"/tmp/usbdisk.img","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw","file":"libvirt-2-storage"}' \ -blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw","file":"libvirt-2-storage"}' \
-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-2-format","id":"ide0-0-0","bootindex":1}' \ -device '{"driver":"usb-storage","bus":"usb.0","port":"1","drive":"libvirt-2-format","id":"usb-disk0","removable":true}' \
-blockdev '{"driver":"file","filename":"/tmp/usbdisk.img","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ -blockdev '{"driver":"file","filename":"/tmp/scsidisk.img","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
-device '{"driver":"usb-storage","bus":"usb.0","port":"1","drive":"libvirt-1-format","id":"usb-disk0","removable":true}' \ -device '{"driver":"scsi-hd","bus":"scsi0.0","channel":0,"scsi-id":0,"lun":1,"device_id":"drive-scsi0-0-0-1","drive":"libvirt-1-format","id":"scsi0-0-0-1","removable":true}' \
-audiodev '{"id":"audio1","driver":"none"}' \ -audiodev '{"id":"audio1","driver":"none"}' \
-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ -device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x3"}' \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on -msg timestamp=on

View File

@ -22,6 +22,11 @@
<source file='/tmp/usbdisk.img'/> <source file='/tmp/usbdisk.img'/>
<target dev='sda' bus='usb' removable='on'/> <target dev='sda' bus='usb' removable='on'/>
</disk> </disk>
<disk type='file' device='disk'>
<source file='/tmp/scsidisk.img'/>
<target dev='sdb' bus='scsi' removable='on'/>
</disk>
<controller type='scsi' index='0' model='virtio-scsi'/>
<memballoon model='virtio'/> <memballoon model='virtio'/>
</devices> </devices>
</domain> </domain>

View File

@ -1227,7 +1227,7 @@ mymain(void)
DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-device-lun-type-invalid"); DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-device-lun-type-invalid");
DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-attaching-partition-nosupport"); DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-attaching-partition-nosupport");
DO_TEST_CAPS_LATEST("disk-usb-device"); DO_TEST_CAPS_LATEST("disk-usb-device");
DO_TEST_CAPS_LATEST("disk-usb-device-removable"); DO_TEST_CAPS_LATEST("disk-device-removable");
DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-usb-pci"); DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-usb-pci");
DO_TEST_CAPS_LATEST("disk-scsi"); DO_TEST_CAPS_LATEST("disk-scsi");
DO_TEST_CAPS_LATEST("disk-scsi-device-auto"); DO_TEST_CAPS_LATEST("disk-scsi-device-auto");