migration: use qemu_file_get_error() return value when possible

Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Juan Quintela 2011-10-05 01:14:46 +02:00
parent 3961b4dd0e
commit 42802d47dd
4 changed files with 24 additions and 16 deletions

View file

@ -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)) { error = qemu_file_get_error(f);
return -EIO; if (error) {
return error;
} }
} while (!(flags & RAM_SAVE_FLAG_EOS)); } while (!(flags & RAM_SAVE_FLAG_EOS));

View file

@ -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)) { ret = qemu_file_get_error(f);
return -EIO; if (ret != 0) {
return ret;
} }
} while (!(flags & BLK_MIG_FLAG_EOS)); } while (!(flags & BLK_MIG_FLAG_EOS));

View file

@ -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)) { error = qemu_file_get_error(s->file);
DPRINTF("flush when error, bailing\n"); 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)) { error = qemu_file_get_error(s->file);
DPRINTF("flush when error, bailing\n"); if (error) {
return -EINVAL; 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)) { ret = qemu_file_get_error(s->file);
return -1; if (ret) {
return ret;
} }
if (s->freeze_output) if (s->freeze_output)
return 1; return 1;

View file

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