From e5dc760d0c48965a282cbd0699d399b615aebfd5 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 24 Apr 2018 16:59:00 +0200 Subject: [PATCH] qemu: domain: Store whether a virStorageSource is a host CDROM drive Use virFileIsCDROM to detect whether a block device is a cdrom drive and store it in virStorageSource. This will be necessary to correctly create the 'host_cdrom' backend in qemu when using -blockdev. We assume that host_cdrom makes only sense when used directly as a raw image, but if a backing chain would be put in front of it, libvirt will use 'host_device' in that case. Signed-off-by: Peter Krempa Reviewed-by: John Ferlan --- src/qemu/qemu_domain.c | 8 ++++++++ src/util/virstoragefile.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 890facf1b7..8a9c958c5c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -7530,6 +7530,14 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, VIR_ALLOC(src->backingStore) < 0) goto cleanup; + /* host cdrom requires special treatment in qemu, so we need to check + * whether a block device is a cdrom */ + if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM && + src->format == VIR_STORAGE_FILE_RAW && + virStorageSourceIsBlockLocal(src) && + virFileIsCDROM(src->path) == 1) + src->hostcdrom = true; + ret = 0; goto cleanup; } diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h index 9286436827..01f89bf182 100644 --- a/src/util/virstoragefile.h +++ b/src/util/virstoragefile.h @@ -316,6 +316,8 @@ struct _virStorageSource { bool floppyimg; /* set to true if the storage source is going to be used as a source for floppy drive */ + + bool hostcdrom; /* backing device is a cdrom */ }; -- GitLab