mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: drop needless acquiring job removing domain
Acquiring job introduced in commit [1] to fix a race described in the commit. Actually it does not help because we get domain in create API before acuiring job. Then [2] fixed the race but [1] was not reverted even it is does not required by [2] to work properly. [1] commit b629c64e5e0a32ef439b8eeb3a697e2cd76f3248 Author: Martin Kletzander <mkletzan@redhat.com> Date: Thu Oct 30 14:38:35 2014 +0100 qemu: avoid rare race when undefining domain [2] commit c7d1c139ca3402e875002753952e80ce8054374e Author: Martin Kletzander <mkletzan@redhat.com> Date: Thu Dec 11 11:14:08 2014 +0100 qemu: avoid rare race when undefining domain Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@openvz.org> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
b66a36e719
commit
e55302596b
@ -7343,7 +7343,7 @@ qemuDomainRemoveInactive(virQEMUDriver *driver,
|
||||
* lock on driver->domains in order to call the remove obj
|
||||
* from locked list method.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
qemuDomainRemoveInactiveLocked(virQEMUDriver *driver,
|
||||
virDomainObj *vm)
|
||||
{
|
||||
@ -7357,49 +7357,6 @@ qemuDomainRemoveInactiveLocked(virQEMUDriver *driver,
|
||||
virDomainObjListRemoveLocked(driver->domains, vm);
|
||||
}
|
||||
|
||||
/**
|
||||
* qemuDomainRemoveInactiveJob:
|
||||
*
|
||||
* Just like qemuDomainRemoveInactive but it tries to grab a
|
||||
* VIR_JOB_MODIFY first. Even though it doesn't succeed in
|
||||
* grabbing the job the control carries with
|
||||
* qemuDomainRemoveInactive call.
|
||||
*/
|
||||
void
|
||||
qemuDomainRemoveInactiveJob(virQEMUDriver *driver,
|
||||
virDomainObj *vm)
|
||||
{
|
||||
bool haveJob;
|
||||
|
||||
haveJob = qemuDomainObjBeginJob(driver, vm, VIR_JOB_MODIFY) >= 0;
|
||||
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
|
||||
if (haveJob)
|
||||
qemuDomainObjEndJob(vm);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuDomainRemoveInactiveJobLocked:
|
||||
*
|
||||
* Similar to qemuDomainRemoveInactiveJob, except that the caller must
|
||||
* also hold the lock @driver->domains
|
||||
*/
|
||||
void
|
||||
qemuDomainRemoveInactiveJobLocked(virQEMUDriver *driver,
|
||||
virDomainObj *vm)
|
||||
{
|
||||
bool haveJob;
|
||||
|
||||
haveJob = qemuDomainObjBeginJob(driver, vm, VIR_JOB_MODIFY) >= 0;
|
||||
|
||||
qemuDomainRemoveInactiveLocked(driver, vm);
|
||||
|
||||
if (haveJob)
|
||||
qemuDomainObjEndJob(vm);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuDomainSetFakeReboot(virDomainObj *vm,
|
||||
|
@ -672,6 +672,10 @@ int qemuDomainSnapshotDiscardAllMetadata(virQEMUDriver *driver,
|
||||
void qemuDomainRemoveInactive(virQEMUDriver *driver,
|
||||
virDomainObj *vm);
|
||||
|
||||
void
|
||||
qemuDomainRemoveInactiveLocked(virQEMUDriver *driver,
|
||||
virDomainObj *vm);
|
||||
|
||||
void qemuDomainSetFakeReboot(virDomainObj *vm,
|
||||
bool value);
|
||||
|
||||
@ -1036,12 +1040,6 @@ int
|
||||
qemuDomainDefNumaCPUsRectify(virDomainDef *def,
|
||||
virQEMUCaps *qemuCaps);
|
||||
|
||||
void qemuDomainRemoveInactiveJob(virQEMUDriver *driver,
|
||||
virDomainObj *vm);
|
||||
|
||||
void qemuDomainRemoveInactiveJobLocked(virQEMUDriver *driver,
|
||||
virDomainObj *vm);
|
||||
|
||||
int virQEMUFileOpenAs(uid_t fallback_uid,
|
||||
gid_t fallback_gid,
|
||||
bool dynamicOwnership,
|
||||
|
@ -1625,7 +1625,7 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
|
||||
|
||||
if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START,
|
||||
flags) < 0) {
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -2751,7 +2751,7 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
|
||||
}
|
||||
qemuDomainObjEndAsyncJob(vm);
|
||||
if (ret == 0)
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
|
||||
cleanup:
|
||||
virQEMUSaveDataFree(data);
|
||||
@ -3228,7 +3228,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom,
|
||||
|
||||
qemuDomainObjEndAsyncJob(vm);
|
||||
if (ret == 0 && flags & VIR_DUMP_CRASH)
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
@ -3536,7 +3536,7 @@ processGuestPanicEvent(virQEMUDriver *driver,
|
||||
endjob:
|
||||
qemuDomainObjEndAsyncJob(vm);
|
||||
if (removeInactive)
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
}
|
||||
|
||||
|
||||
@ -5851,7 +5851,7 @@ qemuDomainRestoreFlags(virConnectPtr conn,
|
||||
virFileWrapperFdFree(wrapperFd);
|
||||
virQEMUSaveDataFree(data);
|
||||
if (vm && ret < 0)
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
virDomainObjEndAPI(&vm);
|
||||
return ret;
|
||||
}
|
||||
@ -6510,7 +6510,7 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
|
||||
} else {
|
||||
/* Brand new domain. Remove it */
|
||||
VIR_INFO("Deleting domain '%s'", vm->def->name);
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3100,7 +3100,7 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
|
||||
virPortAllocatorRelease(priv->nbdPort);
|
||||
priv->nbdPort = 0;
|
||||
virDomainObjRemoveTransientDef(vm);
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
}
|
||||
virDomainObjEndAPI(&vm);
|
||||
virObjectEventStateQueue(driver->domainEventState, event);
|
||||
@ -3517,7 +3517,7 @@ qemuMigrationSrcConfirm(virQEMUDriver *driver,
|
||||
virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
|
||||
vm->persistent = 0;
|
||||
}
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
@ -5342,7 +5342,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver,
|
||||
virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
|
||||
vm->persistent = 0;
|
||||
}
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
}
|
||||
|
||||
virErrorRestore(&orig_err);
|
||||
@ -5416,7 +5416,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
|
||||
}
|
||||
|
||||
if (!virDomainObjIsActive(vm))
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -5877,7 +5877,7 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
|
||||
|
||||
qemuMigrationJobFinish(vm);
|
||||
if (!virDomainObjIsActive(vm))
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
|
||||
cleanup:
|
||||
g_clear_pointer(&jobData, virDomainJobDataFree);
|
||||
|
@ -8973,14 +8973,10 @@ qemuProcessReconnect(void *opaque)
|
||||
driver->inhibitCallback(true, driver->inhibitOpaque);
|
||||
|
||||
cleanup:
|
||||
if (jobStarted) {
|
||||
if (!virDomainObjIsActive(obj))
|
||||
qemuDomainRemoveInactive(driver, obj);
|
||||
if (jobStarted)
|
||||
qemuDomainObjEndJob(obj);
|
||||
} else {
|
||||
if (!virDomainObjIsActive(obj))
|
||||
qemuDomainRemoveInactiveJob(driver, obj);
|
||||
}
|
||||
if (!virDomainObjIsActive(obj))
|
||||
qemuDomainRemoveInactive(driver, obj);
|
||||
virDomainObjEndAPI(&obj);
|
||||
virIdentitySetCurrent(NULL);
|
||||
return;
|
||||
@ -9052,7 +9048,7 @@ qemuProcessReconnectHelper(virDomainObj *obj,
|
||||
*/
|
||||
qemuProcessStop(src->driver, obj, VIR_DOMAIN_SHUTOFF_FAILED,
|
||||
VIR_ASYNC_JOB_NONE, 0);
|
||||
qemuDomainRemoveInactiveJobLocked(src->driver, obj);
|
||||
qemuDomainRemoveInactiveLocked(src->driver, obj);
|
||||
|
||||
virDomainObjEndAPI(&obj);
|
||||
g_clear_object(&data->identity);
|
||||
|
Loading…
x
Reference in New Issue
Block a user