[libvirt] [PATCH v3 04/24] qemu: Use domain condition for synchronous block jobs

2015-06-10 Thread Jiri Denemark
By switching block jobs to use domain conditions, we can drop some
pretty complicated code in NBD storage migration.

Signed-off-by: Jiri Denemark jdene...@redhat.com
---

Notes:
Version 3:
- split into 3 patches

Version 2:
- slightly modified to use domain conditions

 po/POTFILES.in|   1 -
 src/qemu/qemu_blockjob.c  | 137 +++---
 src/qemu/qemu_blockjob.h  |  12 +---
 src/qemu/qemu_domain.c|  17 +-
 src/qemu/qemu_domain.h|   1 -
 src/qemu/qemu_driver.c|  24 
 src/qemu/qemu_migration.c | 112 +
 src/qemu/qemu_process.c   |  13 ++---
 8 files changed, 76 insertions(+), 241 deletions(-)

diff --git a/po/POTFILES.in b/po/POTFILES.in
index bb0f6e1..dd06ab3 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -112,7 +112,6 @@ src/parallels/parallels_utils.h
 src/parallels/parallels_storage.c
 src/phyp/phyp_driver.c
 src/qemu/qemu_agent.c
-src/qemu/qemu_blockjob.c
 src/qemu/qemu_capabilities.c
 src/qemu/qemu_cgroup.c
 src/qemu/qemu_command.c
diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index eb05cef..3aa6118 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -214,19 +214,17 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver,
  *
  * During a synchronous block job, a block job event for @disk
  * will not be processed asynchronously. Instead, it will be
- * processed only when qemuBlockJobSyncWait* or
- * qemuBlockJobSyncEnd is called.
+ * processed only when qemuBlockJobUpdate or qemuBlockJobSyncEnd
+ * is called.
  */
 void
 qemuBlockJobSyncBegin(virDomainDiskDefPtr disk)
 {
 qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
 
-if (diskPriv-blockJobSync)
-VIR_WARN(Disk %s already has synchronous block job,
- disk-dst);
-
+VIR_DEBUG(disk=%s, disk-dst);
 diskPriv-blockJobSync = true;
+diskPriv-blockJobStatus = -1;
 }
 
 
@@ -235,135 +233,16 @@ qemuBlockJobSyncBegin(virDomainDiskDefPtr disk)
  * @driver: qemu driver
  * @vm: domain
  * @disk: domain disk
- * @ret_status: pointer to virConnectDomainEventBlockJobStatus
  *
  * End a synchronous block job for @disk. Any pending block job event
- * for the disk is processed, and its status is recorded in the
- * virConnectDomainEventBlockJobStatus field pointed to by
- * @ret_status.
+ * for the disk is processed.
  */
 void
 qemuBlockJobSyncEnd(virQEMUDriverPtr driver,
 virDomainObjPtr vm,
-virDomainDiskDefPtr disk,
-virConnectDomainEventBlockJobStatus *ret_status)
+virDomainDiskDefPtr disk)
 {
-qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
-
-if (diskPriv-blockJobSync  diskPriv-blockJobStatus != -1) {
-if (ret_status)
-*ret_status = diskPriv-blockJobStatus;
-qemuBlockJobUpdate(driver, vm, disk);
-diskPriv-blockJobStatus = -1;
-}
-diskPriv-blockJobSync = false;
-}
-
-
-/**
- * qemuBlockJobSyncWaitWithTimeout:
- * @driver: qemu driver
- * @vm: domain
- * @disk: domain disk
- * @timeout: timeout in milliseconds
- * @ret_status: pointer to virConnectDomainEventBlockJobStatus
- *
- * Wait up to @timeout milliseconds for a block job event for @disk.
- * If an event is received it is processed, and its status is recorded
- * in the virConnectDomainEventBlockJobStatus field pointed to by
- * @ret_status.
- *
- * If @timeout is not 0, @vm will be unlocked while waiting for the event.
- *
- * Returns 0 if an event was received or the timeout expired,
- *-1 otherwise.
- */
-int
-qemuBlockJobSyncWaitWithTimeout(virQEMUDriverPtr driver,
-virDomainObjPtr vm,
-virDomainDiskDefPtr disk,
-unsigned long long timeout,
-virConnectDomainEventBlockJobStatus 
*ret_status)
-{
-qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
-
-if (!diskPriv-blockJobSync) {
-virReportError(VIR_ERR_INTERNAL_ERROR, %s,
-   _(No current synchronous block job));
-return -1;
-}
-
-while (diskPriv-blockJobSync  diskPriv-blockJobStatus == -1) {
-int r;
-
-if (!virDomainObjIsActive(vm)) {
-virReportError(VIR_ERR_INTERNAL_ERROR, %s,
-   _(guest unexpectedly quit));
-diskPriv-blockJobSync = false;
-return -1;
-}
-
-if (timeout == (unsigned long long)-1) {
-r = virCondWait(diskPriv-blockJobSyncCond, vm-parent.lock);
-} else if (timeout) {
-unsigned long long now;
-if (virTimeMillisNow(now)  0) {
-virReportSystemError(errno, %s,
- _(Unable to get current time));
-return -1;
-}
-r = 

Re: [libvirt] [PATCH v3 04/24] qemu: Use domain condition for synchronous block jobs

2015-06-10 Thread Peter Krempa
On Wed, Jun 10, 2015 at 15:42:38 +0200, Jiri Denemark wrote:
 By switching block jobs to use domain conditions, we can drop some
 pretty complicated code in NBD storage migration.
 
 Signed-off-by: Jiri Denemark jdene...@redhat.com
 ---
 
 Notes:
 Version 3:
 - split into 3 patches
 
 Version 2:
 - slightly modified to use domain conditions
 
  po/POTFILES.in|   1 -
  src/qemu/qemu_blockjob.c  | 137 
 +++---
  src/qemu/qemu_blockjob.h  |  12 +---
  src/qemu/qemu_domain.c|  17 +-
  src/qemu/qemu_domain.h|   1 -
  src/qemu/qemu_driver.c|  24 
  src/qemu/qemu_migration.c | 112 +
  src/qemu/qemu_process.c   |  13 ++---
  8 files changed, 76 insertions(+), 241 deletions(-)
 

ACK,

Peter


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list