/**
* qemuDomainSupportsBlockJobs:
* @vm: domain object
- * @modern: pointer to bool that returns whether modern block jobs are supported
*
* Returns -1 in case when qemu does not support block jobs at all. Otherwise
- * returns 0 and optionally fills @modern to denote that modern (async) block
- * jobs are supported.
+ * returns 0.
*/
int
-qemuDomainSupportsBlockJobs(virDomainObjPtr vm,
- bool *modern)
+qemuDomainSupportsBlockJobs(virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
bool asynchronous = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKJOB_ASYNC);
- bool synchronous = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKJOB_SYNC);
- if (!synchronous && !asynchronous) {
+ if (!asynchronous) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("block jobs not supported with this QEMU binary"));
return -1;
}
- if (modern)
- *modern = asynchronous;
-
return 0;
}
{
qemuDomainObjPrivatePtr priv = vm->privateData;
char *device = NULL;
- bool modern;
virDomainDiskDefPtr disk;
virStorageSourcePtr baseSource = NULL;
unsigned int baseIndex = 0;
goto endjob;
}
- if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ if (qemuDomainSupportsBlockJobs(vm) < 0)
goto endjob;
- if (!modern) {
- if (base) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("partial block pull not supported with this "
- "QEMU binary"));
- goto endjob;
- }
-
- if (bandwidth) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("setting bandwidth at start of block pull not "
- "supported with this QEMU binary"));
- goto endjob;
- }
- }
-
if (!(disk = qemuDomainDiskByName(vm->def, path)))
goto endjob;
baseSource);
if (!baseSource || basePath)
ret = qemuMonitorBlockStream(priv->mon, device, basePath, backingPath,
- speed, modern);
+ speed, true);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
virDomainDiskDefPtr disk = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
bool save = false;
- bool modern;
bool pivot = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT);
bool async = !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC);
virDomainObjPtr vm;
goto endjob;
}
- if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ if (qemuDomainSupportsBlockJobs(vm) < 0)
goto endjob;
if (!(disk = qemuDomainDiskByName(vm->def, path)))
goto endjob;
}
- if (modern && !async)
+ if (!async)
qemuBlockJobSyncBegin(disk);
if (pivot) {
}
qemuDomainObjEnterMonitor(driver, vm);
- ret = qemuMonitorBlockJobCancel(qemuDomainGetMonitor(vm), device, modern);
+ ret = qemuMonitorBlockJobCancel(qemuDomainGetMonitor(vm), device, true);
if (qemuDomainObjExitMonitor(driver, vm) < 0) {
ret = -1;
goto endjob;
* while still holding the VM job, to prevent newly scheduled
* block jobs from confusing us. */
if (!async) {
- if (!modern) {
- /* Older qemu that lacked async reporting also lacked
- * blockcopy and active commit, so we can hardcode the
- * event to pull and let qemuBlockJobEventProcess() handle
- * the rest as usual */
- qemuBlockJobEventProcess(driver, vm, disk,
- QEMU_ASYNC_JOB_NONE,
- VIR_DOMAIN_BLOCK_JOB_TYPE_PULL,
- VIR_DOMAIN_BLOCK_JOB_CANCELED);
- } else {
- qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
- qemuBlockJobUpdate(driver, vm, QEMU_ASYNC_JOB_NONE, disk);
- while (diskPriv->blockjob) {
- if (virDomainObjWait(vm) < 0) {
- ret = -1;
- goto endjob;
- }
- qemuBlockJobUpdate(driver, vm, QEMU_ASYNC_JOB_NONE, disk);
+ qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+ qemuBlockJobUpdate(driver, vm, QEMU_ASYNC_JOB_NONE, disk);
+ while (diskPriv->blockjob) {
+ if (virDomainObjWait(vm) < 0) {
+ ret = -1;
+ goto endjob;
}
+ qemuBlockJobUpdate(driver, vm, QEMU_ASYNC_JOB_NONE, disk);
}
}
goto endjob;
}
- if (qemuDomainSupportsBlockJobs(vm, NULL) < 0)
+ if (qemuDomainSupportsBlockJobs(vm) < 0)
goto endjob;
if (!(disk = virDomainDiskByName(vm->def, path, true))) {
virDomainDiskDefPtr disk;
int ret = -1;
virDomainObjPtr vm;
- bool modern;
const char *device;
unsigned long long speed = bandwidth;
goto endjob;
}
- if (qemuDomainSupportsBlockJobs(vm, &modern) < 0)
+ if (qemuDomainSupportsBlockJobs(vm) < 0)
goto endjob;
if (!(disk = qemuDomainDiskByName(vm->def, path)))
ret = qemuMonitorBlockJobSetSpeed(qemuDomainGetMonitor(vm),
device,
speed,
- modern);
+ true);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;