{
qemuDomainObjPrivatePtr priv = vm->privateData;
+ size_t i;
qemuDomainJobInfoUpdateTime(priv->job.current);
qemuDomainEventEmitJobCompleted(priv->driver, vm);
+ if (!(priv->job.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))) {
+
+ g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(priv->driver);
+
+ for (i = 0; i < priv->backup->ndisks; i++) {
+ virDomainBackupDiskDefPtr backupdisk = priv->backup->disks + i;
+ uid_t uid;
+ gid_t gid;
+
+ if (!backupdisk->store ||
+ backupdisk->store->type != VIR_STORAGE_TYPE_FILE)
+ continue;
+
+ qemuDomainGetImageIds(cfg, vm, backupdisk->store, NULL, &uid, &gid);
+ if (virFileRemove(backupdisk->store->path, uid, gid) < 0)
+ VIR_WARN("failed to remove scratch file '%s'",
+ backupdisk->store->path);
+ }
+ }
+
virDomainBackupDefFree(priv->backup);
priv->backup = NULL;
qemuDomainObjEndAsyncJob(priv->driver, vm);
unsigned long long progressCurrent,
unsigned long long progressTotal)
{
- g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
- uid_t uid;
- gid_t gid;
g_autoptr(qemuBlockStorageSourceAttachData) backend = NULL;
g_autoptr(virJSONValue) actions = NULL;
if (qemuDomainObjExitMonitor(driver, vm) < 0)
return;
- if (job->data.backup.store) {
+ if (job->data.backup.store)
qemuDomainStorageSourceAccessRevoke(driver, vm, job->data.backup.store);
-
- if (job->data.backup.deleteStore &&
- job->data.backup.store->type == VIR_STORAGE_TYPE_FILE) {
- qemuDomainGetImageIds(cfg, vm, job->data.backup.store, NULL, &uid, &gid);
-
- if (virFileRemove(job->data.backup.store->path, uid, gid) < 0)
- VIR_WARN("failed to remove scratch file '%s'",
- job->data.backup.store->path);
- }
- }
}