[libvirt] [PATCH v2 02/22] qemu: Introduce qemuBlockJobUpdate
John Ferlan
jferlan at redhat.com
Wed Jun 10 11:21:27 UTC 2015
On 06/02/2015 08:34 AM, Jiri Denemark wrote:
> The wrapper is useful for calling qemuBlockJobEventProcess with the
> event details stored in disk's privateData, which is the most likely
> usage of qemuBlockJobEventProcess.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
>
> Notes:
> Already ACKed in version 1.
>
> Version 2:
> - no changes
>
> src/libvirt_private.syms | 2 ++
> src/qemu/qemu_blockjob.c | 37 +++++++++++++++++++++++++++++--------
> src/qemu/qemu_blockjob.h | 3 +++
> 3 files changed, 34 insertions(+), 8 deletions(-)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 9076135..8846dea 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -265,6 +265,8 @@ virDomainDiskInsert;
> virDomainDiskInsertPreAlloced;
> virDomainDiskIoTypeFromString;
> virDomainDiskIoTypeToString;
> +virDomainDiskMirrorStateTypeFromString;
> +virDomainDiskMirrorStateTypeToString;
> virDomainDiskPathByName;
> virDomainDiskRemove;
> virDomainDiskRemoveByName;
> diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
> index 098a43a..605c2a5 100644
> --- a/src/qemu/qemu_blockjob.c
> +++ b/src/qemu/qemu_blockjob.c
> @@ -38,6 +38,27 @@
>
> VIR_LOG_INIT("qemu.qemu_blockjob");
>
> +
> +int
> +qemuBlockJobUpdate(virQEMUDriverPtr driver,
> + virDomainObjPtr vm,
> + virDomainDiskDefPtr disk)
> +{
> + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
> + int ret;
> +
> + if ((ret = diskPriv->blockJobStatus) == -1)
> + return -1;
> +
> + qemuBlockJobEventProcess(driver, vm, disk,
> + diskPriv->blockJobType,
> + diskPriv->blockJobStatus);
> + diskPriv->blockJobStatus = -1;
> +
> + return ret;
> +}
> +
> +
> /**
> * qemuBlockJobEventProcess:
> * @driver: qemu driver
> @@ -49,8 +70,6 @@ VIR_LOG_INIT("qemu.qemu_blockjob");
> * Update disk's mirror state in response to a block job event
> * from QEMU. For mirror state's that must survive libvirt
> * restart, also update the domain's status XML.
> - *
> - * Returns 0 on success, -1 otherwise.
> */
> void
> qemuBlockJobEventProcess(virQEMUDriverPtr driver,
> @@ -67,6 +86,12 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver,
> bool save = false;
> qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
>
> + VIR_DEBUG("disk=%s, mirrorState=%s, type=%d, status=%d",
> + disk->dst,
> + NULLSTR(virDomainDiskMirrorStateTypeToString(disk->mirrorState)),
> + type,
> + status);
> +
> /* Have to generate two variants of the event for old vs. new
> * client callbacks */
> if (type == VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT &&
> @@ -218,9 +243,7 @@ qemuBlockJobSyncEnd(virQEMUDriverPtr driver,
> if (diskPriv->blockJobSync && diskPriv->blockJobStatus != -1) {
> if (ret_status)
> *ret_status = diskPriv->blockJobStatus;
> - qemuBlockJobEventProcess(driver, vm, disk,
> - diskPriv->blockJobType,
> - diskPriv->blockJobStatus);
> + qemuBlockJobUpdate(driver, vm, disk);
^^
This doesn't get the returned status...
John
> diskPriv->blockJobStatus = -1;
> }
> diskPriv->blockJobSync = false;
> @@ -300,9 +323,7 @@ qemuBlockJobSyncWaitWithTimeout(virQEMUDriverPtr driver,
>
> if (ret_status)
> *ret_status = diskPriv->blockJobStatus;
> - qemuBlockJobEventProcess(driver, vm, disk,
> - diskPriv->blockJobType,
> - diskPriv->blockJobStatus);
> + qemuBlockJobUpdate(driver, vm, disk);
> diskPriv->blockJobStatus = -1;
>
> return 0;
> diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
> index ba372a2..81e893e 100644
> --- a/src/qemu/qemu_blockjob.h
> +++ b/src/qemu/qemu_blockjob.h
> @@ -25,6 +25,9 @@
> # include "internal.h"
> # include "qemu_conf.h"
>
> +int qemuBlockJobUpdate(virQEMUDriverPtr driver,
> + virDomainObjPtr vm,
> + virDomainDiskDefPtr disk);
> void qemuBlockJobEventProcess(virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> virDomainDiskDefPtr disk,
>
More information about the libvir-list
mailing list