return jobPR;
}
+
+
+/**
+ * qemuDomainSupportsCheckpointsBlockjobs:
+ * @vm: domain object
+ *
+ * Checks whether a block job is supported in possible combination with
+ * checkpoints (qcow2 bitmaps). Returns -1 if unsupported and reports an error
+ * 0 in case everything is supported.
+ */
+int
+qemuDomainSupportsCheckpointsBlockjobs(virDomainObjPtr vm)
+{
+ if (virDomainListCheckpoints(vm->checkpoints, NULL, NULL, NULL, 0) > 0) {
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+ _("cannot perform block operations while checkpoint exists"));
+ return -1;
+ }
+
+ return 0;
+}
if (virDomainSnapshotCreateXMLEnsureACL(domain->conn, vm->def, flags) < 0)
goto cleanup;
- if (virDomainListCheckpoints(vm->checkpoints, NULL, domain, NULL, 0) > 0) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("cannot create snapshot while checkpoint exists"));
+ if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
goto cleanup;
- }
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
goto cleanup;
if (virDomainBlockRebaseEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (virDomainListCheckpoints(vm->checkpoints, NULL, dom, NULL, 0) > 0) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("cannot perform block rebase while checkpoint exists"));
+ if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
goto cleanup;
- }
/* For normal rebase (enhanced blockpull), the common code handles
* everything, including vm cleanup. */
if (virDomainBlockCopyEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (virDomainListCheckpoints(vm->checkpoints, NULL, dom, NULL, 0) > 0) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("cannot perform block copy while checkpoint exists"));
+ if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
goto cleanup;
- }
for (i = 0; i < nparams; i++) {
virTypedParameterPtr param = ¶ms[i];
if (virDomainBlockPullEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (virDomainListCheckpoints(vm->checkpoints, NULL, dom, NULL, 0) > 0) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("cannot perform block pull while checkpoint exists"));
+ if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
goto cleanup;
- }
ret = qemuDomainBlockPullCommon(vm, path, NULL, bandwidth, flags);
if (virDomainBlockCommitEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (virDomainListCheckpoints(vm->checkpoints, NULL, dom, NULL, 0) > 0) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("cannot perform block commit while checkpoint exists"));
+ if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
goto cleanup;
- }
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;