فهرست منبع

migration: use qemu_file_get_error() return value when possible

Signed-off-by: Juan Quintela <quintela@redhat.com>
Juan Quintela 14 سال پیش
والد
کامیت
42802d47dd
4فایلهای تغییر یافته به همراه24 افزوده شده و 16 حذف شده
  1. 4 2
      arch_init.c
  2. 4 3
      block-migration.c
  3. 14 9
      buffered_file.c
  4. 2 2
      savevm.c

+ 4 - 2
arch_init.c

@@ -371,6 +371,7 @@ int ram_load(QEMUFile *f, void *opaque, int version_id)
 {
 {
     ram_addr_t addr;
     ram_addr_t addr;
     int flags;
     int flags;
+    int error;
 
 
     if (version_id < 3 || version_id > 4) {
     if (version_id < 3 || version_id > 4) {
         return -EINVAL;
         return -EINVAL;
@@ -451,8 +452,9 @@ int ram_load(QEMUFile *f, void *opaque, int version_id)
 
 
             qemu_get_buffer(f, host, TARGET_PAGE_SIZE);
             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));
     } while (!(flags & RAM_SAVE_FLAG_EOS));
 
 

+ 4 - 3
block-migration.c

@@ -647,6 +647,7 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
     uint8_t *buf;
     uint8_t *buf;
     int64_t total_sectors = 0;
     int64_t total_sectors = 0;
     int nr_sectors;
     int nr_sectors;
+    int ret;
 
 
     do {
     do {
         addr = qemu_get_be64(f);
         addr = qemu_get_be64(f);
@@ -655,7 +656,6 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
         addr >>= BDRV_SECTOR_BITS;
         addr >>= BDRV_SECTOR_BITS;
 
 
         if (flags & BLK_MIG_FLAG_DEVICE_BLOCK) {
         if (flags & BLK_MIG_FLAG_DEVICE_BLOCK) {
-            int ret;
             /* get device name */
             /* get device name */
             len = qemu_get_byte(f);
             len = qemu_get_byte(f);
             qemu_get_buffer(f, (uint8_t *)device_name, len);
             qemu_get_buffer(f, (uint8_t *)device_name, len);
@@ -705,8 +705,9 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
             fprintf(stderr, "Unknown flags\n");
             fprintf(stderr, "Unknown flags\n");
             return -EINVAL;
             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));
     } while (!(flags & BLK_MIG_FLAG_EOS));
 
 

+ 14 - 9
buffered_file.c

@@ -71,9 +71,11 @@ static void buffered_append(QEMUFileBuffered *s,
 static void buffered_flush(QEMUFileBuffered *s)
 static void buffered_flush(QEMUFileBuffered *s)
 {
 {
     size_t offset = 0;
     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;
         return;
     }
     }
 
 
@@ -108,14 +110,15 @@ static void buffered_flush(QEMUFileBuffered *s)
 static int buffered_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
 static int buffered_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
 {
 {
     QEMUFileBuffered *s = opaque;
     QEMUFileBuffered *s = opaque;
-    int offset = 0;
+    int offset = 0, error;
     ssize_t ret;
     ssize_t ret;
 
 
     DPRINTF("putting %d bytes at %" PRId64 "\n", size, pos);
     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");
     DPRINTF("unfreezing output\n");
@@ -192,14 +195,16 @@ static int buffered_close(void *opaque)
  * The meaning of the return values is:
  * The meaning of the return values is:
  *   0: We can continue sending
  *   0: We can continue sending
  *   1: Time to stop
  *   1: Time to stop
- *  -1: There has been an error
+ *   negative: There has been an error
  */
  */
 static int buffered_rate_limit(void *opaque)
 static int buffered_rate_limit(void *opaque)
 {
 {
     QEMUFileBuffered *s = 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)
     if (s->freeze_output)
         return 1;
         return 1;

+ 2 - 2
savevm.c

@@ -1885,8 +1885,8 @@ out:
         g_free(le);
         g_free(le);
     }
     }
 
 
-    if (qemu_file_get_error(f)) {
-        ret = -EIO;
+    if (ret == 0) {
+        ret = qemu_file_get_error(f);
     }
     }
 
 
     return ret;
     return ret;