From: Peter Krempa Date: Wed, 18 Apr 2018 11:22:29 +0000 (+0200) Subject: qemu: Move virtual FAT disk validation from command line builder X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c9b27af32d54cad57a284dbbd69ba2c241d12257;p=libvirt.git qemu: Move virtual FAT disk validation from command line builder Move it to the validation callback and make it more robust. This will also put the checks in the correct place to use with -blockdev. Signed-off-by: Peter Krempa Reviewed-by: John Ferlan --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 50b0ffcf94..a189aeee7d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1520,20 +1520,6 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, /* for now the DIR based storage is handled by the magic FAT format */ if (actualType == VIR_STORAGE_TYPE_DIR) { - if (disk->src->format > 0 && - disk->src->format != VIR_STORAGE_FILE_FAT) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unsupported disk driver type for '%s'"), - virStorageFileFormatTypeToString(disk->src->format)); - goto cleanup; - } - - if (!disk->src->readonly) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot create virtual FAT disks in read-write mode")); - goto cleanup; - } - virBufferAddLit(buf, "fat:"); if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 901132854c..890facf1b7 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4128,6 +4128,8 @@ static int qemuDomainValidateStorageSource(virStorageSourcePtr src, virQEMUCapsPtr qemuCaps) { + int actualType = virStorageSourceGetActualType(src); + if (src->format == VIR_STORAGE_FILE_COW) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("'cow' storage format is not supported")); @@ -4157,6 +4159,29 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src, return -1; } + if (src->format == VIR_STORAGE_FILE_FAT && + actualType != VIR_STORAGE_TYPE_DIR) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("storage format 'fat' is supported only with 'dir' " + "storage type")); + return -1; + } + + if (actualType == VIR_STORAGE_TYPE_DIR) { + if (src->format > 0 && + src->format != VIR_STORAGE_FILE_FAT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("storage type 'dir' requires use of storage format 'fat'")); + return -1; + } + + if (!src->readonly) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtual FAT storage can't be accessed in read-write mode")); + return -1; + } + } + return 0; }