The test driver can share the same code with qemu driver when implement
testDomainAddIOThreadCheck and testDomainDelIOThreadCheck, so extract
them for test driver to use.
Signed-off-by: Luke Yue <lukedyue(a)gmail.com>
---
src/hypervisor/domain_driver.c | 64 ++++++++++++++++++++++++++++++++++
src/hypervisor/domain_driver.h | 6 ++++
src/libvirt_private.syms | 2 ++
src/qemu/qemu_driver.c | 60 +++----------------------------
4 files changed, 76 insertions(+), 56 deletions(-)
diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
index 29e11c0447..0d4d9ae5de 100644
--- a/src/hypervisor/domain_driver.c
+++ b/src/hypervisor/domain_driver.c
@@ -511,3 +511,67 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev,
return virHostdevPCINodeDeviceDetach(hostdevMgr, pci);
}
+
+/**
+ * virDomainDriverAddIOThreadCheck:
+ * @def: domain definition
+ * @iothread_id: iothread id
+ *
+ * Returns -1 if an IOThread is already using the given iothread id
+ */
+int
+virDomainDriverAddIOThreadCheck(virDomainDef *def,
+ unsigned int iothread_id)
+{
+ if (virDomainIOThreadIDFind(def, iothread_id)) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("an IOThread is already using iothread_id
'%u'"),
+ iothread_id);
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+ * virDomainDriverDelIOThreadCheck:
+ * @def: domain definition
+ * @iothread_id: iothread id
+ *
+ * Returns -1 if there is no IOThread using the given iothread id
+ */
+int
+virDomainDriverDelIOThreadCheck(virDomainDef *def,
+ unsigned int iothread_id)
+{
+ size_t i;
+
+ if (!virDomainIOThreadIDFind(def, iothread_id)) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("cannot find IOThread '%u' in iothreadids
list"),
+ iothread_id);
+ return -1;
+ }
+
+ for (i = 0; i < def->ndisks; i++) {
+ if (def->disks[i]->iothread == iothread_id) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("cannot remove IOThread %u since it "
+ "is being used by disk '%s'"),
+ iothread_id, def->disks[i]->dst);
+ return -1;
+ }
+ }
+
+ for (i = 0; i < def->ncontrollers; i++) {
+ if (def->controllers[i]->iothread == iothread_id) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("cannot remove IOThread '%u' since it "
+ "is being used by controller"),
+ iothread_id);
+ return -1;
+ }
+ }
+
+ return 0;
+}
diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h
index 5970eef082..d91d21bc91 100644
--- a/src/hypervisor/domain_driver.h
+++ b/src/hypervisor/domain_driver.h
@@ -60,3 +60,9 @@ int virDomainDriverNodeDeviceReAttach(virNodeDevicePtr dev,
int virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev,
virHostdevManager *hostdevMgr,
const char *driverName);
+
+int virDomainDriverAddIOThreadCheck(virDomainDef *def,
+ unsigned int iothread_id);
+
+int virDomainDriverDelIOThreadCheck(virDomainDef *def,
+ unsigned int iothread_id);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 43493ea76e..fa2412c0dc 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1531,6 +1531,8 @@ virDomainCgroupSetupMemtune;
# hypervisor/domain_driver.h
+virDomainDriverAddIOThreadCheck;
+virDomainDriverDelIOThreadCheck;
virDomainDriverGenerateMachineName;
virDomainDriverGenerateRootHash;
virDomainDriverMergeBlkioDevice;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0b35bbc15c..b96ac985bf 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5477,58 +5477,6 @@ qemuDomainHotplugDelIOThread(virQEMUDriver *driver,
}
-static int
-qemuDomainAddIOThreadCheck(virDomainDef *def,
- unsigned int iothread_id)
-{
- if (virDomainIOThreadIDFind(def, iothread_id)) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("an IOThread is already using iothread_id
'%u'"),
- iothread_id);
- return -1;
- }
-
- return 0;
-}
-
-
-static int
-qemuDomainDelIOThreadCheck(virDomainDef *def,
- unsigned int iothread_id)
-{
- size_t i;
-
- if (!virDomainIOThreadIDFind(def, iothread_id)) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("cannot find IOThread '%u' in iothreadids
list"),
- iothread_id);
- return -1;
- }
-
- for (i = 0; i < def->ndisks; i++) {
- if (def->disks[i]->iothread == iothread_id) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("cannot remove IOThread %u since it "
- "is being used by disk '%s'"),
- iothread_id, def->disks[i]->dst);
- return -1;
- }
- }
-
- for (i = 0; i < def->ncontrollers; i++) {
- if (def->controllers[i]->iothread == iothread_id) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("cannot remove IOThread '%u' since it "
- "is being used by controller"),
- iothread_id);
- return -1;
- }
- }
-
- return 0;
-}
-
-
/**
* @params: Pointer to params list
* @nparams: Number of params to be parsed
@@ -5662,7 +5610,7 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
switch (action) {
case VIR_DOMAIN_IOTHREAD_ACTION_ADD:
- if (qemuDomainAddIOThreadCheck(def, iothread.iothread_id) < 0)
+ if (virDomainDriverAddIOThreadCheck(def, iothread.iothread_id) < 0)
goto endjob;
if (qemuDomainHotplugAddIOThread(driver, vm, iothread.iothread_id) < 0)
@@ -5671,7 +5619,7 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
break;
case VIR_DOMAIN_IOTHREAD_ACTION_DEL:
- if (qemuDomainDelIOThreadCheck(def, iothread.iothread_id) < 0)
+ if (virDomainDriverDelIOThreadCheck(def, iothread.iothread_id) < 0)
goto endjob;
if (qemuDomainHotplugDelIOThread(driver, vm, iothread.iothread_id) < 0)
@@ -5701,7 +5649,7 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
if (persistentDef) {
switch (action) {
case VIR_DOMAIN_IOTHREAD_ACTION_ADD:
- if (qemuDomainAddIOThreadCheck(persistentDef, iothread.iothread_id) < 0)
+ if (virDomainDriverAddIOThreadCheck(persistentDef, iothread.iothread_id) <
0)
goto endjob;
if (!virDomainIOThreadIDAdd(persistentDef, iothread.iothread_id))
@@ -5710,7 +5658,7 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
break;
case VIR_DOMAIN_IOTHREAD_ACTION_DEL:
- if (qemuDomainDelIOThreadCheck(persistentDef, iothread.iothread_id) < 0)
+ if (virDomainDriverDelIOThreadCheck(persistentDef, iothread.iothread_id) <
0)
goto endjob;
virDomainIOThreadIDDel(persistentDef, iothread.iothread_id);
--
2.32.0