From 5058f2fea2dd9db1d7e2c824a28b814841010839 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Wed, 19 Oct 2011 23:47:46 +0200 Subject: [PATCH 11/18] migration: change has_error to contain errno values RH-Author: Juan Quintela Message-id: <037aeb91fcba21674e0948a51074cc9a53be70af.1319066771.git.quintela@redhat.com> Patchwork-id: 34436 O-Subject: [PATCH qemu-kvm RHEL-6.2 11/16] migration: change has_error to contain errno values Bugzilla: 669581 RH-Acked-by: Amit Shah RH-Acked-by: Orit Wasserman RH-Acked-by: Markus Armbruster We normally already have an errno value. When not, abuse EIO. Signed-off-by: Juan Quintela Conflicts: arch_init.c block-migration.c block-migration: changed a lot, we don't use it anyways. arch_init code is on vl.c on rhel6. --- block-migration.c | 11 ++++++----- buffered_file.c | 4 ++-- hw/hw.h | 2 +- migration.c | 2 +- savevm.c | 8 ++++---- vl.c | 4 ++-- 6 files changed, 16 insertions(+), 15 deletions(-) Signed-off-by: Michal Novotny --- block-migration.c | 11 ++++++----- buffered_file.c | 4 ++-- hw/hw.h | 2 +- migration.c | 2 +- savevm.c | 8 ++++---- vl.c | 4 ++-- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/block-migration.c b/block-migration.c index 4233a3f..776df6d 100644 --- a/block-migration.c +++ b/block-migration.c @@ -203,7 +203,7 @@ static int mig_save_device_bulk(Monitor *mon, QEMUFile *f, error: monitor_printf(mon, "Error reading sector %" PRId64 "\n", cur_sector); - qemu_file_set_error(f); + qemu_file_set_error(f, -EIO); qemu_free(blk->buf); qemu_free(blk); return 0; @@ -310,11 +310,12 @@ static void blk_mig_save_dirty_blocks(Monitor *mon, QEMUFile *f) QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) { for (sector = 0; sector < bmds->cur_sector;) { if (bdrv_get_dirty(bmds->bs, sector)) { - if (bdrv_read(bmds->bs, sector, blk.buf, - BDRV_SECTORS_PER_DIRTY_CHUNK) < 0) { + int ret = bdrv_read(bmds->bs, sector, blk.buf, + BDRV_SECTORS_PER_DIRTY_CHUNK); + if (ret < 0) { monitor_printf(mon, "Error reading sector %" PRId64 "\n", sector); - qemu_file_set_error(f); + qemu_file_set_error(f, ret); qemu_free(blk.buf); return; } @@ -345,7 +346,7 @@ static void flush_blks(QEMUFile* f) break; } if (blk->ret < 0) { - qemu_file_set_error(f); + qemu_file_set_error(f, blk->ret); break; } blk_send(f, blk); diff --git a/buffered_file.c b/buffered_file.c index fab9a41..a855a88 100644 --- a/buffered_file.c +++ b/buffered_file.c @@ -93,7 +93,7 @@ static void buffered_flush(QEMUFileBuffered *s) if (ret <= 0) { DPRINTF("error flushing data, %zd\n", ret); - qemu_file_set_error(s->file); + qemu_file_set_error(s->file, ret); break; } else { DPRINTF("flushed %zd byte(s)\n", ret); @@ -139,7 +139,7 @@ static int buffered_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, in if (ret <= 0) { DPRINTF("error putting\n"); - qemu_file_set_error(s->file); + qemu_file_set_error(s->file, ret); offset = -EINVAL; break; } diff --git a/hw/hw.h b/hw/hw.h index d535f23..aae4bb6 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -88,7 +88,7 @@ int qemu_file_rate_limit(QEMUFile *f); size_t qemu_file_set_rate_limit(QEMUFile *f, size_t new_rate); size_t qemu_file_get_rate_limit(QEMUFile *f); int qemu_file_has_error(QEMUFile *f); -void qemu_file_set_error(QEMUFile *f); +void qemu_file_set_error(QEMUFile *f, int error); /* Try to send any outstanding data. This function is useful when output is * halted due to rate limiting or EAGAIN errors occur as it can be used to diff --git a/migration.c b/migration.c index e35cb41..f0e65a8 100644 --- a/migration.c +++ b/migration.c @@ -476,7 +476,7 @@ void migrate_fd_wait_for_unfreeze(void *opaque) } while (ret == -1 && (s->get_error(s)) == EINTR); if (ret == -1) { - qemu_file_set_error(s->file); + qemu_file_set_error(s->file, -s->get_error(s)); } } diff --git a/savevm.c b/savevm.c index afa37a6..d5fd9cb 100644 --- a/savevm.c +++ b/savevm.c @@ -430,9 +430,9 @@ int qemu_file_has_error(QEMUFile *f) return f->has_error; } -void qemu_file_set_error(QEMUFile *f) +void qemu_file_set_error(QEMUFile *f, int ret) { - f->has_error = 1; + f->has_error = ret; } void qemu_fflush(QEMUFile *f) @@ -447,7 +447,7 @@ void qemu_fflush(QEMUFile *f) if (len > 0) f->buf_offset += f->buf_index; else - f->has_error = 1; + f->has_error = -EINVAL; f->buf_index = 0; } } @@ -476,7 +476,7 @@ static void qemu_fill_buffer(QEMUFile *f) f->buf_size += len; f->buf_offset += len; } else if (len != -EAGAIN) - f->has_error = 1; + f->has_error = len; } int qemu_fclose(QEMUFile *f) diff --git a/vl.c b/vl.c index 7906af0..fc0a57e 100644 --- a/vl.c +++ b/vl.c @@ -2840,7 +2840,7 @@ static int ram_save_block(QEMUFile *f) r = kvm_update_dirty_pages_log(); if (r) { fprintf(stderr, "%s: update dirty pages log failed %d\n", __FUNCTION__, r); - qemu_file_set_error(f); + qemu_file_set_error(f, -EINVAL); return 0; } } @@ -2936,7 +2936,7 @@ static int ram_save_live(Monitor *mon, QEMUFile *f, int stage, void *opaque) } if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) { - qemu_file_set_error(f); + qemu_file_set_error(f, -EINVAL); return 0; } -- 1.7.4.4