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:
Peter Krempa 2019-01-17 17:01:55 +01:00
parent dfe11a705c
commit 4ab8447af7
5 changed files with 27 additions and 12 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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);