mirror of https://gitee.com/openkylin/libvirt.git
qemu: Remove special case for virDomainGetBlockInfo
Like other query commands, this can now be called directly during migration.
This commit is contained in:
parent
9cfd2197e4
commit
fb3cada0a0
|
@ -77,7 +77,6 @@ enum qemuDomainJobSignals {
|
|||
QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME = 1 << 2, /* Request migration downtime change */
|
||||
QEMU_JOB_SIGNAL_MIGRATE_SPEED = 1 << 3, /* Request migration speed change */
|
||||
QEMU_JOB_SIGNAL_BLKSTAT = 1 << 4, /* Request blkstat during migration */
|
||||
QEMU_JOB_SIGNAL_BLKINFO = 1 << 5, /* Request blkinfo during migration */
|
||||
};
|
||||
|
||||
struct qemuDomainJobSignalsData {
|
||||
|
@ -86,9 +85,6 @@ struct qemuDomainJobSignalsData {
|
|||
char *statDevName; /* Device name used by blkstat calls */
|
||||
virDomainBlockStatsPtr blockStat; /* Block statistics for QEMU_JOB_SIGNAL_BLKSTAT */
|
||||
int *statRetCode; /* Return code for the blkstat calls */
|
||||
char *infoDevName; /* Device name used by blkinfo calls */
|
||||
virDomainBlockInfoPtr blockInfo; /* Block information for QEMU_JOB_SIGNAL_BLKINFO */
|
||||
int *infoRetCode; /* Return code for the blkinfo calls */
|
||||
};
|
||||
|
||||
struct qemuDomainJobObj {
|
||||
|
|
|
@ -7088,39 +7088,21 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom,
|
|||
virDomainObjIsActive(vm)) {
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
|
||||
if ((priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_OUT)
|
||||
|| (priv->job.asyncJob == QEMU_ASYNC_JOB_SAVE)) {
|
||||
virDomainObjRef(vm);
|
||||
while (priv->job.signals & QEMU_JOB_SIGNAL_BLKINFO)
|
||||
ignore_value(virCondWait(&priv->job.signalCond, &vm->lock));
|
||||
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
|
||||
goto cleanup;
|
||||
|
||||
priv->job.signalsData.infoDevName = disk->info.alias;
|
||||
priv->job.signalsData.blockInfo = info;
|
||||
priv->job.signalsData.infoRetCode = &ret;
|
||||
priv->job.signals |= QEMU_JOB_SIGNAL_BLKINFO;
|
||||
|
||||
while (priv->job.signals & QEMU_JOB_SIGNAL_BLKINFO)
|
||||
ignore_value(virCondWait(&priv->job.signalCond, &vm->lock));
|
||||
|
||||
if (virDomainObjUnref(vm) == 0)
|
||||
vm = NULL;
|
||||
if (virDomainObjIsActive(vm)) {
|
||||
ignore_value(qemuDomainObjEnterMonitor(driver, vm));
|
||||
ret = qemuMonitorGetBlockExtent(priv->mon,
|
||||
disk->info.alias,
|
||||
&info->allocation);
|
||||
qemuDomainObjExitMonitor(driver, vm);
|
||||
} else {
|
||||
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (virDomainObjIsActive(vm)) {
|
||||
ignore_value(qemuDomainObjEnterMonitor(driver, vm));
|
||||
ret = qemuMonitorGetBlockExtent(priv->mon,
|
||||
disk->info.alias,
|
||||
&info->allocation);
|
||||
qemuDomainObjExitMonitor(driver, vm);
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (qemuDomainObjEndJob(driver, vm) == 0)
|
||||
vm = NULL;
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (qemuDomainObjEndJob(driver, vm) == 0)
|
||||
vm = NULL;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
|
|
|
@ -819,20 +819,6 @@ qemuMigrationProcessJobSignals(struct qemud_driver *driver,
|
|||
|
||||
if (ret < 0)
|
||||
VIR_WARN("Unable to get block statistics");
|
||||
} else if (priv->job.signals & QEMU_JOB_SIGNAL_BLKINFO) {
|
||||
ret = qemuDomainObjEnterMonitorWithDriver(driver, vm);
|
||||
if (ret == 0) {
|
||||
ret = qemuMonitorGetBlockExtent(priv->mon,
|
||||
priv->job.signalsData.infoDevName,
|
||||
&priv->job.signalsData.blockInfo->allocation);
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
}
|
||||
|
||||
*priv->job.signalsData.infoRetCode = ret;
|
||||
priv->job.signals ^= QEMU_JOB_SIGNAL_BLKINFO;
|
||||
|
||||
if (ret < 0)
|
||||
VIR_WARN("Unable to get block information");
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue