We normally already have an errno value. When not, abuse EINVAL. Signed-off-by: Juan Quintela <quint...@redhat.com> --- arch_init.c | 2 +- block-migration.c | 6 +++--- buffered_file.c | 4 ++-- hw/hw.h | 2 +- migration.c | 2 +- savevm.c | 8 ++++---- 6 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/arch_init.c b/arch_init.c index a6c69c7..941d585 100644 --- a/arch_init.c +++ b/arch_init.c @@ -263,7 +263,7 @@ 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; } diff --git a/block-migration.c b/block-migration.c index e2775ee..2638f51 100644 --- a/block-migration.c +++ b/block-migration.c @@ -263,7 +263,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, -EINVAL); g_free(blk->buf); g_free(blk); return 0; @@ -439,7 +439,7 @@ static int mig_save_device_dirty(Monitor *mon, QEMUFile *f, error: monitor_printf(mon, "Error reading sector %" PRId64 "\n", sector); - qemu_file_set_error(f); + qemu_file_set_error(f, -EINVAL); g_free(blk->buf); g_free(blk); return 0; @@ -473,7 +473,7 @@ static void flush_blks(QEMUFile* f) break; } if (blk->ret < 0) { - qemu_file_set_error(f); + qemu_file_set_error(f, -EINVAL); break; } blk_send(f, blk); diff --git a/buffered_file.c b/buffered_file.c index 3dadec0..3e5333c 100644 --- a/buffered_file.c +++ b/buffered_file.c @@ -92,7 +92,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); @@ -138,7 +138,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 a124da9..6cf8cd2 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -86,7 +86,7 @@ int qemu_file_rate_limit(QEMUFile *f); int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate); int64_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 56c2b1c..541da98 100644 --- a/migration.c +++ b/migration.c @@ -459,7 +459,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 15c9c52..8bc7272 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; } } @@ -468,7 +468,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) -- 1.7.6.4