#include "virtime.h"
#include "locking/domain_lock.h"
#include "viralloc.h"
+#include "virstring.h"
#define VIR_FROM_THIS VIR_FROM_QEMU
{
qemuBlockJobDataPtr job = obj;
+ VIR_FREE(job->name);
VIR_FREE(job->errmsg);
}
VIR_ONCE_GLOBAL_INIT(qemuBlockJobData)
static qemuBlockJobDataPtr
-qemuBlockJobDataNew(qemuBlockJobType type)
+qemuBlockJobDataNew(qemuBlockJobType type,
+ const char *name)
{
qemuBlockJobDataPtr job = NULL;
+ qemuBlockJobDataPtr ret = NULL;
if (qemuBlockJobDataInitialize() < 0)
return NULL;
if (!(job = virObjectNew(qemuBlockJobDataClass)))
return NULL;
+ if (VIR_STRDUP(job->name, name) < 0)
+ goto cleanup;
+
job->state = QEMU_BLOCKJOB_STATE_NEW;
job->newstate = -1;
job->type = type;
- return job;
+ VIR_STEAL_PTR(ret, job);
+
+ cleanup:
+ virObjectUnref(job);
+ return ret;
}
*/
qemuBlockJobDataPtr
qemuBlockJobDiskNew(virDomainDiskDefPtr disk,
- qemuBlockJobType type)
+ qemuBlockJobType type,
+ const char *jobname)
{
qemuBlockJobDataPtr job = NULL;
- if (!(job = qemuBlockJobDataNew(type)))
+ if (!(job = qemuBlockJobDataNew(type, jobname)))
return NULL;
job->disk = disk;
struct _qemuBlockJobData {
virObject parent;
+ char *name;
+
virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not correspond to any disk */
bool started;
qemuBlockJobDataPtr
qemuBlockJobDiskNew(virDomainDiskDefPtr disk,
- qemuBlockJobType type)
- ATTRIBUTE_NONNULL(1);
+ qemuBlockJobType type,
+ const char *jobname)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3);
qemuBlockJobDataPtr
qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk)
}
if (!(job = qemuBlockJobDiskGetJob(disk))) {
- if (!(job = qemuBlockJobDiskNew(disk, type)))
+ if (!(job = qemuBlockJobDiskNew(disk, type, diskAlias)))
goto endjob;
qemuBlockJobStarted(job);
}
speed <<= 20;
}
- if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL)))
+ if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL, device)))
goto endjob;
qemuDomainObjEnterMonitor(driver, vm);
goto endjob;
}
- if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY)))
+ if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, device)))
goto endjob;
/* Actually start the mirroring */
jobtype = QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT;
}
- if (!(job = qemuBlockJobDiskNew(disk, jobtype)))
+ if (!(job = qemuBlockJobDiskNew(disk, jobtype, device)))
goto endjob;
qemuDomainObjEnterMonitor(driver, vm);
if (!(diskAlias = qemuAliasDiskDriveFromDisk(disk)))
goto cleanup;
- if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY)))
+ if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, diskAlias)))
goto cleanup;
qemuBlockJobSyncBegin(job);
disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT)
jobtype = disk->mirrorJob;
- if (!(job = qemuBlockJobDiskNew(disk, jobtype)))
+ if (!(job = qemuBlockJobDiskNew(disk, jobtype, jobname)))
return -1;
qemuBlockJobStarted(job);