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 <pkrempa(a)redhat.com>
---
src/qemu/qemu_command.c | 14 --------------
src/qemu/qemu_domain.c | 25 +++++++++++++++++++++++++
2 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index b666f3715f..6de2fc56d5 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1512,20 +1512,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 6d7ab4ff80..8f240bd66d 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -4117,6 +4117,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"));
@@ -4146,6 +4148,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;
}
--
2.14.3