[pve-devel] [PATCH stable-5 qemu] fix async_savevm write

Dominik Csapak d.csapak at proxmox.com
Thu Mar 14 15:29:01 CET 2019


we ignored the return value of the write operation, which meant that
we missed all errors that could pop up

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 .../patches/pve/0031-savevm-async-fixups-for-AIO-WAIT.patch  | 12 ++++++++----
 debian/patches/pve/0036-More-2.12-fixups.patch               |  6 +++---
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/debian/patches/pve/0031-savevm-async-fixups-for-AIO-WAIT.patch b/debian/patches/pve/0031-savevm-async-fixups-for-AIO-WAIT.patch
index e9e881a..39c2c44 100644
--- a/debian/patches/pve/0031-savevm-async-fixups-for-AIO-WAIT.patch
+++ b/debian/patches/pve/0031-savevm-async-fixups-for-AIO-WAIT.patch
@@ -5,8 +5,8 @@ Subject: [PATCH] savevm-async fixups for AIO-WAIT
 
 Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
 ---
- savevm-async.c | 34 +++++++++++++++-------------------
- 1 file changed, 15 insertions(+), 19 deletions(-)
+ savevm-async.c | 37 +++++++++++++++++++------------------
+ 1 file changed, 19 insertions(+), 18 deletions(-)
 
 diff --git a/savevm-async.c b/savevm-async.c
 index 313f6551c9..03d1184077 100644
@@ -44,7 +44,7 @@ index 313f6551c9..03d1184077 100644
      BlkRwCo rwco;
  
      assert(pos == snap_state.bs_pos);
-@@ -169,19 +168,22 @@ static ssize_t block_state_writev_buffer(void *opaque, struct iovec *iov,
+@@ -169,19 +168,27 @@ static ssize_t block_state_writev_buffer(void *opaque, struct iovec *iov,
  
      qemu_iovec_init_external(&qiov, iov, iovcnt);
  
@@ -60,6 +60,10 @@ index 313f6551c9..03d1184077 100644
 +        Coroutine *co = qemu_coroutine_create(&block_state_write_entry, &rwco);
 +        bdrv_coroutine_enter(blk_bs(snap_state.target), co);
 +        BDRV_POLL_WHILE(blk_bs(snap_state.target), rwco.ret == NOT_DONE);
++    }
++
++    if (rwco.ret < 0) {
++        return rwco.ret;
      }
 -    aio_context_release(aio_context);
 -
@@ -75,7 +79,7 @@ index 313f6551c9..03d1184077 100644
  static void process_savevm_cleanup(void *opaque)
  {
      int ret;
-@@ -276,12 +278,6 @@ static void *process_savevm_thread(void *opaque)
+@@ -276,12 +283,6 @@ static void *process_savevm_thread(void *opaque)
      return NULL;
  }
  
diff --git a/debian/patches/pve/0036-More-2.12-fixups.patch b/debian/patches/pve/0036-More-2.12-fixups.patch
index 8deab21..571b021 100644
--- a/debian/patches/pve/0036-More-2.12-fixups.patch
+++ b/debian/patches/pve/0036-More-2.12-fixups.patch
@@ -31,7 +31,7 @@ index 03d1184077..0fb4309b2e 100644
  #include "qemu/cutils.h"
  
  /* #define DEBUG_SAVEVM_STATE */
-@@ -225,10 +228,10 @@ static void *process_savevm_thread(void *opaque)
+@@ -230,10 +233,10 @@ static void *process_savevm_thread(void *opaque)
      }
  
      while (snap_state.state == SAVE_STATE_ACTIVE) {
@@ -45,7 +45,7 @@ index 03d1184077..0fb4309b2e 100644
  
          maxlen = blk_getlength(snap_state.target) - 30*1024*1024;
  
-@@ -314,7 +317,7 @@ void qmp_savevm_start(bool has_statefile, const char *statefile, Error **errp)
+@@ -319,7 +322,7 @@ void qmp_savevm_start(bool has_statefile, const char *statefile, Error **errp)
      /* Open the image */
      QDict *options = NULL;
      options = qdict_new();
@@ -54,7 +54,7 @@ index 03d1184077..0fb4309b2e 100644
      snap_state.target = blk_new_open(statefile, NULL, options, bdrv_oflags, &local_err);
      if (!snap_state.target) {
          error_set(errp, ERROR_CLASS_GENERIC_ERROR, "failed to open '%s'", statefile);
-@@ -368,18 +371,20 @@ void qmp_savevm_end(Error **errp)
+@@ -373,18 +376,20 @@ void qmp_savevm_end(Error **errp)
      snap_state.state = SAVE_STATE_DONE;
  }
  
-- 
2.11.0





More information about the pve-devel mailing list