mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
qemu: blockjob: Add job name into the data
Currently the job name corresponds to the disk the job belongs to. For jobs which will not correspond to disks we'll need to track the name separately. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
dfe11a705c
commit
4ab8447af7
@ -36,6 +36,7 @@
|
||||
#include "virtime.h"
|
||||
#include "locking/domain_lock.h"
|
||||
#include "viralloc.h"
|
||||
#include "virstring.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_QEMU
|
||||
|
||||
@ -50,6 +51,7 @@ qemuBlockJobDataDispose(void *obj)
|
||||
{
|
||||
qemuBlockJobDataPtr job = obj;
|
||||
|
||||
VIR_FREE(job->name);
|
||||
VIR_FREE(job->errmsg);
|
||||
}
|
||||
|
||||
@ -67,9 +69,11 @@ qemuBlockJobDataOnceInit(void)
|
||||
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;
|
||||
@ -77,11 +81,18 @@ qemuBlockJobDataNew(qemuBlockJobType type)
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -95,11 +106,12 @@ qemuBlockJobDataNew(qemuBlockJobType type)
|
||||
*/
|
||||
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;
|
||||
|
@ -63,6 +63,8 @@ typedef qemuBlockJobData *qemuBlockJobDataPtr;
|
||||
struct _qemuBlockJobData {
|
||||
virObject parent;
|
||||
|
||||
char *name;
|
||||
|
||||
virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not correspond to any disk */
|
||||
|
||||
bool started;
|
||||
@ -77,8 +79,9 @@ struct _qemuBlockJobData {
|
||||
|
||||
qemuBlockJobDataPtr
|
||||
qemuBlockJobDiskNew(virDomainDiskDefPtr disk,
|
||||
qemuBlockJobType type)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
qemuBlockJobType type,
|
||||
const char *jobname)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3);
|
||||
|
||||
qemuBlockJobDataPtr
|
||||
qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk)
|
||||
|
@ -4733,7 +4733,7 @@ processBlockJobEvent(virQEMUDriverPtr driver,
|
||||
}
|
||||
|
||||
if (!(job = qemuBlockJobDiskGetJob(disk))) {
|
||||
if (!(job = qemuBlockJobDiskNew(disk, type)))
|
||||
if (!(job = qemuBlockJobDiskNew(disk, type, diskAlias)))
|
||||
goto endjob;
|
||||
qemuBlockJobStarted(job);
|
||||
}
|
||||
@ -17316,7 +17316,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver,
|
||||
speed <<= 20;
|
||||
}
|
||||
|
||||
if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL)))
|
||||
if (!(job = qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL, device)))
|
||||
goto endjob;
|
||||
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
@ -17851,7 +17851,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr 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 */
|
||||
@ -18265,7 +18265,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
|
||||
jobtype = QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT;
|
||||
}
|
||||
|
||||
if (!(job = qemuBlockJobDiskNew(disk, jobtype)))
|
||||
if (!(job = qemuBlockJobDiskNew(disk, jobtype, device)))
|
||||
goto endjob;
|
||||
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
|
@ -916,7 +916,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver,
|
||||
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);
|
||||
|
@ -7839,7 +7839,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload,
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user