This function will remain public due to its usage in qemublocktest.c
even after moving qemuDomainDeviceDefValidate(). The position of its
header in qemu_validate.h is no accident.
Signed-off-by: Daniel Henrique Barboza <danielhb413(a)gmail.com>
---
src/qemu/qemu_domain.c | 100 +--------------------------------------
src/qemu/qemu_validate.c | 99 ++++++++++++++++++++++++++++++++++++++
src/qemu/qemu_validate.h | 2 +
tests/qemublocktest.c | 3 +-
4 files changed, 104 insertions(+), 100 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 6fa2326edc..2b3dea9d3f 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5421,104 +5421,6 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src,
}
-int
-qemuDomainDeviceDefValidateDisk(const virDomainDiskDef *disk,
- virQEMUCapsPtr qemuCaps)
-{
- const char *driverName = virDomainDiskGetDriver(disk);
- virStorageSourcePtr n;
- int idx;
- int partition;
-
- if (disk->src->shared && !disk->src->readonly &&
- !qemuBlockStorageSourceSupportsConcurrentAccess(disk->src)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("shared access for disk '%s' requires use of
"
- "supported storage format"), disk->dst);
- return -1;
- }
-
- if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON) {
- if (disk->src->readonly) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("copy_on_read is not compatible with read-only disk
'%s'"),
- disk->dst);
- return -1;
- }
-
- if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ||
- disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("copy_on_read is not supported with removable disk
'%s'"),
- disk->dst);
- return -1;
- }
- }
-
- if (disk->geometry.cylinders > 0 &&
- disk->geometry.heads > 0 &&
- disk->geometry.sectors > 0) {
- if (disk->bus == VIR_DOMAIN_DISK_BUS_USB ||
- disk->bus == VIR_DOMAIN_DISK_BUS_SD) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("CHS geometry can not be set for '%s'
bus"),
- virDomainDiskBusTypeToString(disk->bus));
- return -1;
- }
-
- if (disk->geometry.trans != VIR_DOMAIN_DISK_TRANS_DEFAULT &&
- disk->bus != VIR_DOMAIN_DISK_BUS_IDE) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("CHS translation mode can only be set for 'ide'
bus not '%s'"),
- virDomainDiskBusTypeToString(disk->bus));
- return -1;
- }
- }
-
- if (disk->serial && disk->bus == VIR_DOMAIN_DISK_BUS_SD) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Serial property not supported for drive bus
'%s'"),
- virDomainDiskBusTypeToString(disk->bus));
- return -1;
- }
-
- if (driverName && STRNEQ(driverName, "qemu")) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unsupported driver name '%s' for disk
'%s'"),
- driverName, disk->dst);
- return -1;
- }
-
- if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM &&
- disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("disk type 'virtio' of '%s' does not
support ejectable media"),
- disk->dst);
- return -1;
- }
-
- if (virDiskNameParse(disk->dst, &idx, &partition) < 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("invalid disk target '%s'"), disk->dst);
- return -1;
- }
-
- if (partition != 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("invalid disk target '%s', partitions can't
appear in disk targets"),
- disk->dst);
- return -1;
- }
-
- for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
- if (qemuDomainValidateStorageSource(n, qemuCaps) < 0)
- return -1;
- }
-
- return 0;
-}
-
-
static int
qemuDomainDeviceDefValidateControllerAttributes(const virDomainControllerDef
*controller)
{
@@ -6981,7 +6883,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
break;
case VIR_DOMAIN_DEVICE_DISK:
- ret = qemuDomainDeviceDefValidateDisk(dev->data.disk, qemuCaps);
+ ret = qemuValidateDomainDeviceDefDisk(dev->data.disk, qemuCaps);
break;
case VIR_DOMAIN_DEVICE_CONTROLLER:
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 0caec1fce3..0f267b4abe 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -21,6 +21,7 @@
#include <config.h>
#include "qemu_validate.h"
+#include "qemu_block.h"
#include "qemu_domain.h"
#include "virlog.h"
#include "virutil.h"
@@ -1815,3 +1816,101 @@ qemuValidateDomainDeviceDefVideo(const virDomainVideoDef *video,
return 0;
}
+
+
+int
+qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
+ virQEMUCapsPtr qemuCaps)
+{
+ const char *driverName = virDomainDiskGetDriver(disk);
+ virStorageSourcePtr n;
+ int idx;
+ int partition;
+
+ if (disk->src->shared && !disk->src->readonly &&
+ !qemuBlockStorageSourceSupportsConcurrentAccess(disk->src)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("shared access for disk '%s' requires use of
"
+ "supported storage format"), disk->dst);
+ return -1;
+ }
+
+ if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON) {
+ if (disk->src->readonly) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("copy_on_read is not compatible with read-only disk
'%s'"),
+ disk->dst);
+ return -1;
+ }
+
+ if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ||
+ disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("copy_on_read is not supported with removable disk
'%s'"),
+ disk->dst);
+ return -1;
+ }
+ }
+
+ if (disk->geometry.cylinders > 0 &&
+ disk->geometry.heads > 0 &&
+ disk->geometry.sectors > 0) {
+ if (disk->bus == VIR_DOMAIN_DISK_BUS_USB ||
+ disk->bus == VIR_DOMAIN_DISK_BUS_SD) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("CHS geometry can not be set for '%s'
bus"),
+ virDomainDiskBusTypeToString(disk->bus));
+ return -1;
+ }
+
+ if (disk->geometry.trans != VIR_DOMAIN_DISK_TRANS_DEFAULT &&
+ disk->bus != VIR_DOMAIN_DISK_BUS_IDE) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("CHS translation mode can only be set for 'ide'
bus not '%s'"),
+ virDomainDiskBusTypeToString(disk->bus));
+ return -1;
+ }
+ }
+
+ if (disk->serial && disk->bus == VIR_DOMAIN_DISK_BUS_SD) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Serial property not supported for drive bus
'%s'"),
+ virDomainDiskBusTypeToString(disk->bus));
+ return -1;
+ }
+
+ if (driverName && STRNEQ(driverName, "qemu")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("unsupported driver name '%s' for disk
'%s'"),
+ driverName, disk->dst);
+ return -1;
+ }
+
+ if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM &&
+ disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("disk type 'virtio' of '%s' does not
support ejectable media"),
+ disk->dst);
+ return -1;
+ }
+
+ if (virDiskNameParse(disk->dst, &idx, &partition) < 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("invalid disk target '%s'"), disk->dst);
+ return -1;
+ }
+
+ if (partition != 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("invalid disk target '%s', partitions can't
appear in disk targets"),
+ disk->dst);
+ return -1;
+ }
+
+ for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
+ if (qemuDomainValidateStorageSource(n, qemuCaps) < 0)
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/qemu/qemu_validate.h b/src/qemu/qemu_validate.h
index 387c6ce556..ba732d05d8 100644
--- a/src/qemu/qemu_validate.h
+++ b/src/qemu/qemu_validate.h
@@ -26,6 +26,8 @@
#include "qemu_capabilities.h"
int qemuValidateDomainDef(const virDomainDef *def, void *opaque);
+int qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
+ virQEMUCapsPtr qemuCaps);
int qemuValidateDomainDeviceDefAddress(const virDomainDeviceDef *dev,
virQEMUCapsPtr qemuCaps);
int qemuValidateDomainDeviceDefNetwork(const virDomainNetDef *net,
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 124eaea752..f9fbfc98f2 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -28,6 +28,7 @@
#include "qemu/qemu_monitor_json.h"
#include "qemu/qemu_backup.h"
#include "qemu/qemu_checkpoint.h"
+#include "qemu/qemu_validate.h"
#include "qemu/qemu_command.h"
@@ -283,7 +284,7 @@ testQemuDiskXMLToProps(const void *opaque)
return -1;
if (qemuCheckDiskConfig(disk, vmdef, data->qemuCaps) < 0 ||
- qemuDomainDeviceDefValidateDisk(disk, data->qemuCaps) < 0) {
+ qemuValidateDomainDeviceDefDisk(disk, data->qemuCaps) < 0) {
VIR_TEST_VERBOSE("invalid configuration for disk");
return -1;
}
--
2.25.1