[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