From b40ec75296769884ba873d2a72cdda01c2c03c24 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 7 May 2020 10:53:51 +0200 Subject: [PATCH] qemu: Forbid non-raw images for disk type='lun' with vitio-blk frontend Historically the virtio-blk frontend by default enabled SCSI emulation and tried to do SCSI command passthrough. As this was enabled by default there's a fallback mechanism in place in cases when the backend doesn't support SCSI for any reason. This is not the case when disk type=lun is used with 'scsi-block' via 'virtio-scsi'. We did not restrict configurations when the user picks 'qcow2' or any other format as format of the disk, in which case the emulation is disabled as such configuration doesn't make sense. This patch unifies the approach so that 'raw' is required both when used via 'virtio-blk' and 'virtio-scsi' so that the user is presented with the expected configuration. Note that use of is already very restrictive as it requires a block device or iSCSI storage. Additionally the scsi emulation is now deprecated by qemu with virtio-blk as it conflicts with virtio-1 and the alternative is to use 'virtio-scsi' which performs better and is along for a very long time. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_domain.c | 6 ++++++ src/qemu/qemu_validate.c | 8 -------- tests/qemuxml2argvdata/virtio-lun.args | 4 ++-- tests/qemuxml2argvdata/virtio-lun.xml | 4 ++-- tests/qemuxml2xmloutdata/virtio-lun.xml | 4 ++-- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index b6806f017b..4205c42a56 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10481,6 +10481,12 @@ qemuDomainDefValidateDiskLunSource(const virStorageSource *src) return -1; } + if (src->format != VIR_STORAGE_FILE_RAW) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk device 'lun' must use 'raw' format")); + return -1; + } + return 0; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 2cde678ca0..f789ed075a 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1997,14 +1997,6 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, return -1; } - if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI && - disk->src->format != VIR_STORAGE_FILE_RAW) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("disk device 'lun' using target 'scsi' must use " - "'raw' format")); - return -1; - } - if (qemuDomainDefValidateDiskLunSource(disk->src) < 0) return -1; diff --git a/tests/qemuxml2argvdata/virtio-lun.args b/tests/qemuxml2argvdata/virtio-lun.args index 7df1512b9b..850501142a 100644 --- a/tests/qemuxml2argvdata/virtio-lun.args +++ b/tests/qemuxml2argvdata/virtio-lun.args @@ -27,10 +27,10 @@ server,nowait \ -boot menu=on \ -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \ -usb \ --drive file=/dev/sdfake,format=qcow2,if=none,id=drive-virtio-disk0 \ +-drive file=/dev/sdfake,format=raw,if=none,id=drive-virtio-disk0 \ -device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\ id=virtio-disk0,bootindex=2 \ --drive file=/dev/sdfake2,format=qcow2,if=none,id=drive-virtio-disk1 \ +-drive file=/dev/sdfake2,format=raw,if=none,id=drive-virtio-disk1 \ -device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\ id=virtio-disk1 \ -netdev user,id=hostnet0 \ diff --git a/tests/qemuxml2argvdata/virtio-lun.xml b/tests/qemuxml2argvdata/virtio-lun.xml index 303131fb61..c802da1838 100644 --- a/tests/qemuxml2argvdata/virtio-lun.xml +++ b/tests/qemuxml2argvdata/virtio-lun.xml @@ -17,13 +17,13 @@ /usr/bin/qemu-system-x86_64 - +
- +
diff --git a/tests/qemuxml2xmloutdata/virtio-lun.xml b/tests/qemuxml2xmloutdata/virtio-lun.xml index dbedd4edc0..23052cd519 100644 --- a/tests/qemuxml2xmloutdata/virtio-lun.xml +++ b/tests/qemuxml2xmloutdata/virtio-lun.xml @@ -17,13 +17,13 @@ /usr/bin/qemu-system-x86_64 - +
- +