qemu: block: Extract calls of qemuBlockGetNamedNodeData into a helper function

Create a wrapper for qemuBlockGetNamedNodeData named
qemuBlockGetNamedNodeData. The purpose of the wrapper is to integrate
the monitor handling functionality and in the future possible
qemuCaps-based flags.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-01-21 15:10:27 +01:00
parent 8e94e29010
commit 5ddfac1169
4 changed files with 29 additions and 16 deletions

View File

@ -830,10 +830,7 @@ qemuBackupBegin(virDomainObjPtr vm,
goto endjob;
}
if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, QEMU_ASYNC_JOB_BACKUP) < 0)
goto endjob;
blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
if (qemuDomainObjExitMonitor(priv->driver, vm) < 0 || !blockNamedNodeData)
if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_BACKUP)))
goto endjob;
if ((ndd = qemuBackupDiskPrepareData(vm, def, incremental, blockNamedNodeData,

View File

@ -2670,3 +2670,23 @@ qemuBlockNamedNodeDataGetBitmapByName(virHashTablePtr blockNamedNodeData,
return NULL;
}
virHashTablePtr
qemuBlockGetNamedNodeData(virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverPtr driver = priv->driver;
g_autoptr(virHashTable) blockNamedNodeData = NULL;
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return NULL;
blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
return NULL;
return g_steal_pointer(&blockNamedNodeData);
}

View File

@ -208,3 +208,7 @@ qemuBlockNamedNodeDataBitmapPtr
qemuBlockNamedNodeDataGetBitmapByName(virHashTablePtr blockNamedNodeData,
virStorageSourcePtr src,
const char *bitmap);
virHashTablePtr
qemuBlockGetNamedNodeData(virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob);

View File

@ -15642,15 +15642,9 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
if (!(actions = virJSONValueNewArray()))
return -1;
if (blockdev) {
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return -1;
blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
return -1;
}
if (blockdev &&
!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, asyncJob)))
return -1;
/* prepare a list of objects to use in the vm definition so that we don't
* have to roll back later */
@ -18354,9 +18348,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
priv->qemuCaps)))
goto endjob;
} else {
qemuDomainObjEnterMonitor(driver, vm);
blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
goto endjob;
if (qemuBlockStorageSourceCreateDetectSize(blockNamedNodeData,