@@ -129,6 +129,7 @@ void qemu_file_skip(QEMUFile *f, int size);
void qemu_file_credit_transfer(QEMUFile *f, size_t size);
int qemu_file_get_error_obj_any(QEMUFile *f1, QEMUFile *f2, Error **errp);
void qemu_file_set_error_obj(QEMUFile *f, int ret, Error *err);
+int qemu_file_get_error_obj(QEMUFile *f, Error **errp);
void qemu_file_set_error(QEMUFile *f, int ret);
int qemu_file_shutdown(QEMUFile *f);
QEMUFile *qemu_file_get_return_path(QEMUFile *f);
@@ -2027,6 +2027,13 @@ out:
res = qemu_file_get_error(rp);
if (res) {
+ /* We have forwarded any error in "err" already, reuse "error" */
+ assert(err == NULL);
+ /* Try to deliver this file error to migration state */
+ qemu_file_get_error_obj(rp, &err);
+ migrate_set_error(ms, err);
+ err = NULL;
+
if (res && migration_in_postcopy()) {
/*
* Maybe there is something we can do: it looks like a
@@ -146,7 +146,7 @@ void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks)
* is not 0.
*
*/
-static int qemu_file_get_error_obj(QEMUFile *f, Error **errp)
+int qemu_file_get_error_obj(QEMUFile *f, Error **errp)
{
if (errp) {
*errp = f->last_error_obj ? error_copy(f->last_error_obj) : NULL;