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@xxxxxxxxxx> > --- > > 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, > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list