From b3e617f74e41ffd4f18d2fcf3536858a5b6fcdef Mon Sep 17 00:00:00 2001
From: Juan Quintela <quintela@redhat.com>
Date: Wed, 19 Oct 2011 23:47:50 +0200
Subject: [PATCH 15/18] migration: use qemu_file_get_error() return value when
 possible

RH-Author: Juan Quintela <quintela@redhat.com>
Message-id: <c5818716f32ac8528aa17565ffca622b355c1057.1319066771.git.quintela@redhat.com>
Patchwork-id: 34441
O-Subject: [PATCH qemu-kvm RHEL-6.2 15/16] migration: use qemu_file_get_error() return value when possible
Bugzilla: 669581
RH-Acked-by: Amit Shah <amit.shah@redhat.com>
RH-Acked-by: Orit Wasserman <owasserm@redhat.com>
RH-Acked-by: Markus Armbruster <armbru@redhat.com>

Signed-off-by: Juan Quintela <quintela@redhat.com>

Conflicts:

	arch_init.c
on vl.c

	block-migration.c
code changed/moved
---
 block-migration.c |    6 ++++--
 buffered_file.c   |   23 ++++++++++++++---------
 savevm.c          |    4 ++--
 vl.c              |    6 ++++--
 4 files changed, 24 insertions(+), 15 deletions(-)

Signed-off-by: Michal Novotny <minovotn@redhat.com>
---
 block-migration.c |    6 ++++--
 buffered_file.c   |   23 ++++++++++++++---------
 savevm.c          |    4 ++--
 vl.c              |    6 ++++--
 4 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/block-migration.c b/block-migration.c
index 122f561..1628def 100644
--- a/block-migration.c
+++ b/block-migration.c
@@ -482,6 +482,7 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
     int64_t addr;
     BlockDriverState *bs;
     uint8_t *buf;
+    int ret;
 
     do {
         addr = qemu_get_be64(f);
@@ -520,8 +521,9 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
             fprintf(stderr, "Unknown flags\n");
             return -EINVAL;
         }
-        if (qemu_file_get_error(f)) {
-            return -EIO;
+        ret = qemu_file_get_error(f);
+        if (ret != 0) {
+            return ret;
         }
     } while (!(flags & BLK_MIG_FLAG_EOS));
 
diff --git a/buffered_file.c b/buffered_file.c
index 14f7a24..dd1f172 100644
--- a/buffered_file.c
+++ b/buffered_file.c
@@ -72,9 +72,11 @@ static void buffered_append(QEMUFileBuffered *s,
 static void buffered_flush(QEMUFileBuffered *s)
 {
     size_t offset = 0;
+    int error;
 
-    if (qemu_file_get_error(s->file)) {
-        DPRINTF("flush when error, bailing\n");
+    error = qemu_file_get_error(s->file);
+    if (error != 0) {
+        DPRINTF("flush when error, bailing: %s\n", strerror(-error));
         return;
     }
 
@@ -109,14 +111,15 @@ static void buffered_flush(QEMUFileBuffered *s)
 static int buffered_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
 {
     QEMUFileBuffered *s = opaque;
-    int offset = 0;
+    int offset = 0, error;
     ssize_t ret;
 
     DPRINTF("putting %d bytes at %" PRId64 "\n", size, pos);
 
-    if (qemu_file_get_error(s->file)) {
-        DPRINTF("flush when error, bailing\n");
-        return -EINVAL;
+    error = qemu_file_get_error(s->file);
+    if (error) {
+        DPRINTF("flush when error, bailing: %s\n", strerror(-error));
+        return error;
     }
 
     DPRINTF("unfreezing output\n");
@@ -193,14 +196,16 @@ static int buffered_close(void *opaque)
  * The meaning of the return values is:
  *   0: We can continue sending
  *   1: Time to stop
- *  -1: There has been an error
+ *   negative: There has been an error
  */
 static int buffered_rate_limit(void *opaque)
 {
     QEMUFileBuffered *s = opaque;
+    int ret;
 
-    if (qemu_file_get_error(s->file)) {
-        return -1;
+    ret = qemu_file_get_error(s->file);
+    if (ret) {
+        return ret;
     }
     if (s->freeze_output)
         return 1;
diff --git a/savevm.c b/savevm.c
index 86d3279..4306144 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1866,8 +1866,8 @@ out:
         qemu_free(le);
     }
 
-    if (qemu_file_get_error(f)) {
-        ret = -EIO;
+    if (ret == 0) {
+        ret = qemu_file_get_error(f);
     }
 
     return ret;
diff --git a/vl.c b/vl.c
index 547be13..3aee379 100644
--- a/vl.c
+++ b/vl.c
@@ -3055,6 +3055,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
 {
     ram_addr_t addr;
     int flags;
+    int error;
 
     if (version_id < 3 || version_id > 4)
         return -EINVAL;
@@ -3131,8 +3132,9 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
 
             qemu_get_buffer(f, host, TARGET_PAGE_SIZE);
         }
-        if (qemu_file_get_error(f)) {
-            return -EIO;
+        error = qemu_file_get_error(f);
+        if (error) {
+            return error;
         }
     } while (!(flags & RAM_SAVE_FLAG_EOS));
 
-- 
1.7.4.4

