The convention in qemu-file.c is to return a negative value on error. The only place that could use qemu_file_set_error() to store a positive value to f->last_error was vmstate_save() which has been fixed in the previous patch.
bdrv_inactivate_all() already returns a negative value on error. Document that qemu_file_set_error() needs -errno and alter the callers to check ret < 0. Signed-off-by: Fabiano Rosas <faro...@suse.de> --- migration/qemu-file.c | 2 ++ migration/savevm.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/migration/qemu-file.c b/migration/qemu-file.c index acc282654a..8276bac248 100644 --- a/migration/qemu-file.c +++ b/migration/qemu-file.c @@ -222,6 +222,8 @@ int qemu_file_get_error(QEMUFile *f) /* * Set the last error for stream f + * + * The error ('ret') should be in -errno format. */ void qemu_file_set_error(QEMUFile *f, int ret) { diff --git a/migration/savevm.c b/migration/savevm.c index 95c2abf47c..f3c303ab74 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1249,7 +1249,7 @@ void qemu_savevm_state_setup(QEMUFile *f) QTAILQ_FOREACH(se, &savevm_state.handlers, entry) { if (se->vmsd && se->vmsd->early_setup) { ret = vmstate_save(f, se, ms->vmdesc); - if (ret) { + if (ret < 0) { qemu_file_set_error(f, ret); break; } @@ -1464,7 +1464,7 @@ int qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f, } ret = vmstate_save(f, se, vmdesc); - if (ret) { + if (ret < 0) { qemu_file_set_error(f, ret); return ret; } @@ -1474,7 +1474,7 @@ int qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f, /* Inactivate before sending QEMU_VM_EOF so that the * bdrv_activate_all() on the other end won't fail. */ ret = bdrv_inactivate_all(); - if (ret) { + if (ret < 0) { error_report("%s: bdrv_inactivate_all() failed (%d)", __func__, ret); qemu_file_set_error(f, ret); -- 2.35.3