From 4ab8447af778e7e9a10fd80feafd30cb26da7c09 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 17 Jan 2019 17:01:55 +0100 Subject: [PATCH] qemu: blockjob: Add job name into the data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Ján Tomko --- src/qemu/qemu_blockjob.c | 20 ++++++++++++++++---- src/qemu/qemu_blockjob.h | 7 +++++-- src/qemu/qemu_driver.c | 8 ++++---- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_process.c | 2 +- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index c75396bec7..9b638b7ef6 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -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; diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index f20346ebff..ed63f2c709 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -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) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ee64f0ce0a..90319261ff 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -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); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index ac4e6ca510..950d9cd615 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -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); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 4587039976..afa960a683 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -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);