提交 0a9fd832 编写于 作者: P Peter Krempa

qemu: Detect managed persistent reservations in block job orphan chains

The PR manager is a property of the format layer in qemu so we need to
be able to track it also in the chains of orphaned block jobs.

Add a helper for qemu to look also into the blockjob state.
Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 b3f8ad07
......@@ -14780,3 +14780,44 @@ qemuDomainPausedReasonToSuspendedEvent(virDomainPausedReason reason)
return VIR_DOMAIN_EVENT_SUSPENDED_PAUSED;
}
static int
qemuDomainDefHasManagedPRBlockjobIterator(void *payload,
const void *name ATTRIBUTE_UNUSED,
void *opaque)
{
qemuBlockJobDataPtr job = payload;
bool *hasPR = opaque;
if (job->disk)
return 0;
if ((job->chain && virStorageSourceChainHasManagedPR(job->chain)) ||
(job->mirrorChain && virStorageSourceChainHasManagedPR(job->mirrorChain)))
*hasPR = true;
return 0;
}
/**
* qemuDomainDefHasManagedPR:
* @vm: domain object
*
* @vm must be an active VM. Returns true if @vm has any storage source with
* managed persistent reservations.
*/
bool
qemuDomainDefHasManagedPR(virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
bool jobPR = false;
if (virDomainDefHasManagedPR(vm->def))
return true;
virHashForEach(priv->blockjobs, qemuDomainDefHasManagedPRBlockjobIterator, &jobPR);
return jobPR;
}
......@@ -1146,6 +1146,8 @@ qemuDomainDiskCachemodeFlags(int cachemode,
char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
bool qemuDomainDefHasManagedPR(virDomainObjPtr vm);
unsigned int qemuDomainStorageIdNew(qemuDomainObjPrivatePtr priv);
void qemuDomainStorageIdReset(qemuDomainObjPrivatePtr priv);
......
......@@ -4792,7 +4792,7 @@ processPRDisconnectEvent(virDomainObjPtr vm)
return;
if (!priv->prDaemonRunning &&
virDomainDefHasManagedPR(vm->def))
qemuDomainDefHasManagedPR(vm))
qemuProcessStartManagedPRDaemon(vm);
}
......
......@@ -397,7 +397,7 @@ qemuHotplugRemoveManagedPR(virQEMUDriverPtr driver,
virErrorPtr orig_err;
int ret = -1;
if (virDomainDefHasManagedPR(vm->def))
if (qemuDomainDefHasManagedPR(vm))
return 0;
virErrorPreserveLast(&orig_err);
......
......@@ -2309,7 +2309,7 @@ qemuRefreshPRManagerState(virQEMUDriverPtr driver,
int ret = -1;
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER) ||
!virDomainDefHasManagedPR(vm->def))
!qemuDomainDefHasManagedPR(vm))
return 0;
qemuDomainObjEnterMonitor(driver, vm);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册