migration: wire vmstate_save_state errors up to vmstate_subsection_save

Route the errors from vmstate_save_state up through
vmstate_subsection_save (and back down, all rather recursive).

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20170925112917.21340-5-dgilbert@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
  Commit message fixed up as per Peter's review
This commit is contained in:
Dr. David Alan Gilbert 2017-09-25 12:29:15 +01:00
parent 88b0faf185
commit f3cadd39c4

View File

@ -21,8 +21,8 @@
#include "trace.h" #include "trace.h"
#include "qjson.h" #include "qjson.h"
static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd, static int vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
void *opaque, QJSON *vmdesc); void *opaque, QJSON *vmdesc);
static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd, static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
void *opaque); void *opaque);
@ -395,9 +395,7 @@ int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
json_end_array(vmdesc); json_end_array(vmdesc);
} }
vmstate_subsection_save(f, vmsd, opaque, vmdesc); return vmstate_subsection_save(f, vmsd, opaque, vmdesc);
return 0;
} }
static const VMStateDescription * static const VMStateDescription *
@ -463,11 +461,12 @@ static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
return 0; return 0;
} }
static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd, static int vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
void *opaque, QJSON *vmdesc) void *opaque, QJSON *vmdesc)
{ {
const VMStateDescription **sub = vmsd->subsections; const VMStateDescription **sub = vmsd->subsections;
bool subsection_found = false; bool subsection_found = false;
int ret = 0;
trace_vmstate_subsection_save_top(vmsd->name); trace_vmstate_subsection_save_top(vmsd->name);
while (sub && *sub && (*sub)->needed) { while (sub && *sub && (*sub)->needed) {
@ -491,7 +490,10 @@ static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
qemu_put_byte(f, len); qemu_put_byte(f, len);
qemu_put_buffer(f, (uint8_t *)vmsdsub->name, len); qemu_put_buffer(f, (uint8_t *)vmsdsub->name, len);
qemu_put_be32(f, vmsdsub->version_id); qemu_put_be32(f, vmsdsub->version_id);
vmstate_save_state(f, vmsdsub, opaque, vmdesc); ret = vmstate_save_state(f, vmsdsub, opaque, vmdesc);
if (ret) {
return ret;
}
if (vmdesc) { if (vmdesc) {
json_end_object(vmdesc); json_end_object(vmdesc);
@ -503,4 +505,6 @@ static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
if (vmdesc && subsection_found) { if (vmdesc && subsection_found) {
json_end_array(vmdesc); json_end_array(vmdesc);
} }
return ret;
} }