diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 278b2237b1a8af7e304dfd6a5254d734bb3f1614..bdfa35bfa4e89c201b6b91ff5f105cf6a83bec3e 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -12317,33 +12317,6 @@ virDomainDiskRemoveByName(virDomainDefPtr def, const char *name) return virDomainDiskRemove(def, idx); } -/** - * virDomainHasBlockjob: - * @vm: domain object - * @copy_only: Reject only block copy job - * - * Return true if @vm has at least one disk involved in a current block - * copy/commit/pull job. If @copy_only is true this returns true only if the - * disk is involved in a block copy. - * */ -bool -virDomainHasBlockjob(virDomainObjPtr vm, - bool copy_only) -{ - size_t i; - for (i = 0; i < vm->def->ndisks; i++) { - if (!copy_only && - vm->def->disks[i]->blockjob) - return true; - - if (vm->def->disks[i]->mirror && - vm->def->disks[i]->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) - return true; - } - - return false; -} - int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net) { /* hostdev net devices must also exist in the hostdevs array */ diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f57f3c949771df65ee048472d8ed48d9227f544f..b5e76171dfd9346ead029e4f1b82c55b628700dd 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2697,9 +2697,6 @@ int virDomainDiskSourceParse(xmlNodePtr node, xmlXPathContextPtr ctxt, virStorageSourcePtr src); -bool virDomainHasBlockjob(virDomainObjPtr vm, - bool copy_only); - int virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net); virDomainNetDefPtr virDomainNetFind(virDomainDefPtr def, const char *device); bool virDomainHasNet(virDomainDefPtr def, virDomainNetDefPtr net); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6e33f84e493d2ce5332fcfc7b871b84f3220a0c0..f80fc7021308974c1fb0eb54b4480973fd349f11 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -308,7 +308,6 @@ virDomainGraphicsTypeFromString; virDomainGraphicsTypeToString; virDomainGraphicsVNCSharePolicyTypeFromString; virDomainGraphicsVNCSharePolicyTypeToString; -virDomainHasBlockjob; virDomainHasNet; virDomainHostdevCapsTypeToString; virDomainHostdevDefAlloc; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index fa8229ffcdb926fb5c0c290bc8f1bc6f9a0b3b94..b69f10f8a8756f4e47016af02021b7f935369220 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2828,6 +2828,34 @@ qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk) } +/** + * qemuDomainHasBlockjob: + * @vm: domain object + * @copy_only: Reject only block copy job + * + * Return true if @vm has at least one disk involved in a current block + * copy/commit/pull job. If @copy_only is true this returns true only if the + * disk is involved in a block copy. + * */ +bool +qemuDomainHasBlockjob(virDomainObjPtr vm, + bool copy_only) +{ + size_t i; + for (i = 0; i < vm->def->ndisks; i++) { + if (!copy_only && + vm->def->disks[i]->blockjob) + return true; + + if (vm->def->disks[i]->mirror && + vm->def->disks[i]->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) + return true; + } + + return false; +} + + int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 3162f84e169ebd6088f5e4f27bb30cc12adf811e..7f2e4b589aa9b2a3f9feea5cc1c19ebc459cd3c0 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -432,6 +432,8 @@ int qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo, int qemuDomainSupportsBlockJobs(virDomainObjPtr vm, bool *modern) ATTRIBUTE_NONNULL(1); bool qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk); +bool qemuDomainHasBlockjob(virDomainObjPtr vm, bool copy_only) + ATTRIBUTE_NONNULL(1); int qemuDomainAlignMemorySizes(virDomainDefPtr def); void qemuDomainMemoryDeviceAlignSize(virDomainMemoryDefPtr mem); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e6efc809bf076eaa84d0852b79d06a18ad3bd74d..75a69510514101891ca4cd76baf58e62d2116cbf 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7736,7 +7736,7 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml virObjectRef(vm); def = NULL; - if (virDomainHasBlockjob(vm, true)) { + if (qemuDomainHasBlockjob(vm, true)) { virReportError(VIR_ERR_BLOCK_COPY_ACTIVE, "%s", _("domain has active block job")); virDomainObjAssignDef(vm, NULL, false, NULL); @@ -15624,7 +15624,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, if (!(caps = virQEMUDriverGetCapabilities(driver, false))) goto cleanup; - if (virDomainHasBlockjob(vm, false)) { + if (qemuDomainHasBlockjob(vm, false)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("domain has active block job")); goto cleanup; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4dcba7af03ce8d04eae8f445e85dfc534dd6f21c..72a2ead2a2f4bd1fb842531cb8e4c7f21eec62c7 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2067,7 +2067,7 @@ qemuMigrationIsAllowed(virQEMUDriverPtr driver, virDomainObjPtr vm, } - if (virDomainHasBlockjob(vm, false)) { + if (qemuDomainHasBlockjob(vm, false)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("domain has an active block job")); return false;