unsigned long long pull_tmp_total;
char *errmsg; /* error message of failed sub-blockjob */
+
+ unsigned int apiFlags; /* original flags used when starting the job */
};
typedef enum {
qemuDomainObjPrivatePtr priv = vm->privateData;
size_t i;
- if (!(priv->job.apiFlags & VIR_DOMAIN_BACKUP_BEGIN_REUSE_EXTERNAL) &&
+ if (!(priv->backup->apiFlags & VIR_DOMAIN_BACKUP_BEGIN_REUSE_EXTERNAL) &&
(priv->backup->type == VIR_DOMAIN_BACKUP_TYPE_PULL ||
(priv->backup->type == VIR_DOMAIN_BACKUP_TYPE_PUSH &&
jobstatus != QEMU_DOMAIN_JOB_STATUS_COMPLETED))) {
if (def->type == VIR_DOMAIN_BACKUP_TYPE_PULL)
pull = true;
+ def->apiFlags = flags;
+
/* we'll treat this kind of backup job as an asyncjob as it uses some of the
* infrastructure for async jobs. We'll allow standard modify-type jobs
* as the interlocking of conflicting operations is handled on the block
#include "virthreadjob.h"
#include "virutil.h"
#include "storage_source.h"
+#include "backup_conf.h"
#define VIR_FROM_THIS VIR_FROM_QEMU
g_clear_object(&data->identity);
VIR_FREE(data);
+ cfg = virQEMUDriverGetConfig(driver);
+ priv = obj->privateData;
+
qemuDomainObjRestoreJob(obj, &oldjob);
if (oldjob.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN)
stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED;
-
- cfg = virQEMUDriverGetConfig(driver);
- priv = obj->privateData;
+ if (oldjob.asyncJob == QEMU_ASYNC_JOB_BACKUP && priv->backup)
+ priv->backup->apiFlags = oldjob.apiFlags;
/* expect that libvirt might have crashed during VM start, so prevent
* cleanup of transient disks */