]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: introduce qemuDomainDeviceDefValidateFS
authorJán Tomko <jtomko@redhat.com>
Tue, 16 Jul 2019 10:05:19 +0000 (12:05 +0200)
committerJán Tomko <jtomko@redhat.com>
Tue, 16 Jul 2019 15:00:37 +0000 (17:00 +0200)
Move validation of the filesystem device out of qemu_command.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Acked-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_domain.c

index ef90dc5044c39f087f4dea700c693b2672783540..92219d8937ffbc51001c7154fec05ce3f58fce53 100644 (file)
@@ -2707,17 +2707,6 @@ qemuBuildFSStr(virDomainFSDefPtr fs)
     const char *driver = qemuDomainFSDriverTypeToString(fs->fsdriver);
     const char *wrpolicy = virDomainFSWrpolicyTypeToString(fs->wrpolicy);
 
-    if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("only supports mount filesystem type"));
-        goto error;
-    }
-
-    if (!driver) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Filesystem driver type not supported"));
-        goto error;
-    }
     virBufferAdd(&opt, driver, -1);
 
     if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_PATH ||
@@ -2729,14 +2718,6 @@ qemuBuildFSStr(virDomainFSDefPtr fs)
         } else if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_SQUASH) {
             virBufferAddLit(&opt, ",security_model=none");
         }
-    } else {
-        /* For other fs drivers, default(passthru) should always
-         * be supported */
-        if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("only supports passthrough accessmode"));
-            goto error;
-        }
     }
 
     if (fs->wrpolicy)
@@ -2767,12 +2748,6 @@ qemuBuildFSDevStr(const virDomainDef *def,
 {
     virBuffer opt = VIR_BUFFER_INITIALIZER;
 
-    if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("can only passthrough directories"));
-        goto error;
-    }
-
     if (qemuBuildVirtioDevStr(&opt, "virtio-9p", qemuCaps,
                               VIR_DOMAIN_DEVICE_FS, fs) < 0) {
         goto error;
index 670b928c4ccfa4084d0111abf1a58339b335d197..bd7e8c2648ec99fc721316e1afe38a6958079cda 100644 (file)
@@ -6274,6 +6274,47 @@ qemuDomainDeviceDefValidateIOMMU(const virDomainIOMMUDef *iommu,
 }
 
 
+static int
+qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
+                              const virDomainDef *def ATTRIBUTE_UNUSED,
+                              virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED)
+{
+    if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("only supports mount filesystem type"));
+        return -1;
+    }
+
+    switch ((virDomainFSDriverType) fs->fsdriver) {
+    case VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT:
+    case VIR_DOMAIN_FS_DRIVER_TYPE_PATH:
+        break;
+
+    case VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE:
+        if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("only supports passthrough accessmode"));
+            return -1;
+        }
+        break;
+
+    case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
+    case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
+    case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("Filesystem driver type not supported"));
+        return -1;
+
+    case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
+    default:
+        virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);
+        return -1;
+    }
+
+    return 0;
+}
+
+
 static int
 qemuDomainDeviceDefValidateZPCIAddress(virDomainDeviceInfoPtr info,
                                        virQEMUCapsPtr qemuCaps)
@@ -6429,8 +6470,11 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
         ret = qemuDomainDeviceDefValidateIOMMU(dev->data.iommu, def, qemuCaps);
         break;
 
-    case VIR_DOMAIN_DEVICE_LEASE:
     case VIR_DOMAIN_DEVICE_FS:
+        ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, qemuCaps);
+        break;
+
+    case VIR_DOMAIN_DEVICE_LEASE:
     case VIR_DOMAIN_DEVICE_SOUND:
     case VIR_DOMAIN_DEVICE_HUB:
     case VIR_DOMAIN_DEVICE_NVRAM: