Now they are used only to relize their wrappers vmstate_save/load_vmsd(). So, let's do final convertion.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- include/migration/vmstate.h | 21 +----- migration/vmstate.c | 141 ++++++++++++++++++------------------ 2 files changed, 74 insertions(+), 88 deletions(-) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index aaeb33045e..b2fda750e3 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -1222,27 +1222,10 @@ extern const VMStateInfo vmstate_info_qlist; .flags = VMS_END, \ } -int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, +bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, int version_id, Error **errp); -int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, +bool vmstate_save_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, JSONWriter *vmdesc, Error **errp); -int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc, - int version_id, Error **errp); - -static inline bool vmstate_load_vmsd( - QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, int version_id, Error **errp) -{ - return vmstate_load_state(f, vmsd, opaque, version_id, errp) >= 0; -} - -static inline bool vmstate_save_vmsd( - QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc, Error **errp) -{ - return vmstate_save_state(f, vmsd, opaque, vmdesc, errp) >= 0; -} bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque); diff --git a/migration/vmstate.c b/migration/vmstate.c index 2298f190de..b8fb1d0a40 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -131,12 +131,11 @@ static void vmstate_handle_alloc(void *ptr, const VMStateField *field, } } -int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, +bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, int version_id, Error **errp) { ERRP_GUARD(); const VMStateField *field = vmsd->fields; - int ret = 0; trace_vmstate_load_state(vmsd->name, version_id); if (version_id > vmsd->version_id) { @@ -144,14 +143,14 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, "for local version_id %d", vmsd->name, version_id, vmsd->version_id); trace_vmstate_load_state_end(vmsd->name, "too new", -EINVAL); - return -EINVAL; + return false; } if (version_id < vmsd->minimum_version_id) { error_setg(errp, "%s: incoming version_id %d is too old " "for local minimum version_id %d", vmsd->name, version_id, vmsd->minimum_version_id); trace_vmstate_load_state_end(vmsd->name, "too old", -EINVAL); - return -EINVAL; + return false; } if (vmsd->pre_load_errp) { if (!vmsd->pre_load_errp(opaque, errp)) { @@ -159,16 +158,16 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, "version_id: %d, minimum version_id: %d: ", vmsd->name, vmsd->version_id, vmsd->minimum_version_id); - return -EINVAL; + return false; } } else if (vmsd->pre_load) { - ret = vmsd->pre_load(opaque); + int ret = vmsd->pre_load(opaque); if (ret) { error_setg(errp, "pre load hook failed for: '%s', " "version_id: %d, minimum version_id: %d, ret: %d", vmsd->name, vmsd->version_id, vmsd->minimum_version_id, ret); - return ret; + return false; } } while (field->name) { @@ -187,6 +186,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, for (i = 0; i < n_elems; i++) { void *curr_elem = first_elem + size * i; const VMStateField *inner_field; + bool ok; if (field->flags & VMS_ARRAY_OF_POINTER) { curr_elem = *(void **)curr_elem; @@ -204,21 +204,20 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, } if (inner_field->flags & VMS_STRUCT) { - ret = vmstate_load_state(f, inner_field->vmsd, curr_elem, - inner_field->vmsd->version_id, - errp); + ok = vmstate_load_vmsd(f, inner_field->vmsd, curr_elem, + inner_field->vmsd->version_id, + errp); } else if (inner_field->flags & VMS_VSTRUCT) { - ret = vmstate_load_state(f, inner_field->vmsd, curr_elem, - inner_field->struct_version_id, - errp); + ok = vmstate_load_vmsd(f, inner_field->vmsd, curr_elem, + inner_field->struct_version_id, + errp); } else { - if (!inner_field->info->load( - f, curr_elem, size, inner_field, errp)) { - error_prepend( - errp, - "Failed to load element of type %s for %s: ", - inner_field->info->name, inner_field->name); - ret = -EINVAL; + ok = inner_field->info->load(f, curr_elem, size, + inner_field, errp); + if (!ok) { + error_prepend(errp, + "Failed to load element of type %s for %s: ", + inner_field->info->name, inner_field->name); } } @@ -227,24 +226,25 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, g_clear_pointer((gpointer *)&inner_field, g_free); } - if (ret >= 0) { - ret = qemu_file_get_error(f); + if (ok) { + int ret = qemu_file_get_error(f); if (ret < 0) { + ok = false; error_setg(errp, "Failed to load %s state: stream error: %d", vmsd->name, ret); } } - if (ret < 0) { - qemu_file_set_error(f, ret); - trace_vmstate_load_field_error(field->name, ret); - return ret; + if (!ok) { + qemu_file_set_error(f, -EINVAL); + trace_vmstate_load_field_error(field->name, -EINVAL); + return false; } } } else if (field->flags & VMS_MUST_EXIST) { error_setg(errp, "Input validation failed: %s/%s version_id: %d", vmsd->name, field->name, vmsd->version_id); - return -1; + return false; } field++; } @@ -258,20 +258,24 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, error_prepend(errp, "post load hook failed for: %s, version_id: " "%d, minimum_version: %d: ", vmsd->name, vmsd->version_id, vmsd->minimum_version_id); - ret = -EINVAL; + trace_vmstate_load_state_end(vmsd->name, "end", -EINVAL); + return false; } } else if (vmsd->post_load) { - ret = vmsd->post_load(opaque, version_id); + int ret = vmsd->post_load(opaque, version_id); if (ret < 0) { error_setg(errp, "post load hook failed for: %s, version_id: %d, " "minimum_version: %d, ret: %d", vmsd->name, vmsd->version_id, vmsd->minimum_version_id, ret); + trace_vmstate_load_state_end(vmsd->name, "end", -EINVAL); + return false; } } - trace_vmstate_load_state_end(vmsd->name, "end", ret); - return ret; + + trace_vmstate_load_state_end(vmsd->name, "end", 0); + return true; } static int vmfield_name_num(const VMStateField *start, @@ -420,34 +424,29 @@ bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque) } -int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc_id, Error **errp) -{ - return vmstate_save_state_v(f, vmsd, opaque, vmdesc_id, vmsd->version_id, errp); -} - -int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc, int version_id, Error **errp) +static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vmsd, + void *opaque, JSONWriter *vmdesc, + int version_id, Error **errp) { ERRP_GUARD(); - int ret = 0; + bool ok; const VMStateField *field = vmsd->fields; trace_vmstate_save_state_top(vmsd->name); if (vmsd->pre_save_errp) { - ret = vmsd->pre_save_errp(opaque, errp) ? 0 : -EINVAL; - trace_vmstate_save_state_pre_save_res(vmsd->name, ret); - if (ret < 0) { + ok = vmsd->pre_save_errp(opaque, errp); + trace_vmstate_save_state_pre_save_res(vmsd->name, ok); + if (!ok) { error_prepend(errp, "pre-save for %s failed: ", vmsd->name); - return ret; + return false; } } else if (vmsd->pre_save) { - ret = vmsd->pre_save(opaque); + int ret = vmsd->pre_save(opaque); trace_vmstate_save_state_pre_save_res(vmsd->name, ret); if (ret) { error_setg(errp, "pre-save failed: %s", vmsd->name); - return ret; + return false; } } @@ -528,16 +527,16 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, i, max_elems); if (inner_field->flags & VMS_STRUCT) { - ret = vmstate_save_state(f, inner_field->vmsd, - curr_elem, vmdesc_loop, errp); + ok = vmstate_save_vmsd(f, inner_field->vmsd, + curr_elem, vmdesc_loop, errp); } else if (inner_field->flags & VMS_VSTRUCT) { - ret = vmstate_save_state_v(f, inner_field->vmsd, - curr_elem, vmdesc_loop, - inner_field->struct_version_id, - errp); - } else if (!inner_field->info->save( - f, curr_elem, size, inner_field, vmdesc_loop, errp)) { - ret = -EINVAL; + ok = vmstate_save_vmsd_v(f, inner_field->vmsd, + curr_elem, vmdesc_loop, + inner_field->struct_version_id, + errp); + } else { + ok = inner_field->info->save( + f, curr_elem, size, inner_field, vmdesc_loop, errp); } written_bytes = qemu_file_transferred(f) - old_offset; @@ -549,18 +548,13 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, g_clear_pointer((gpointer *)&inner_field, g_free); } - if (ret) { - if (*errp) { - error_prepend(errp, "Save of field %s/%s failed: ", - vmsd->name, field->name); - } else { - error_setg(errp, "Save of field %s/%s failed", - vmsd->name, field->name); - } + if (!ok) { + error_prepend(errp, "Save of field %s/%s failed: ", + vmsd->name, field->name); if (vmsd->post_save) { vmsd->post_save(opaque); } - return ret; + return false; } /* Compressed arrays only care about the first element */ @@ -583,18 +577,27 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, json_writer_end_array(vmdesc); } - ret = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp) ? 0 : -EINVAL; + ok = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp); if (vmsd->post_save) { int ps_ret = vmsd->post_save(opaque); - if (!ret && ps_ret) { - ret = ps_ret; + if (ok && ps_ret) { + ok = false; error_setg(errp, "post-save failed: %s", vmsd->name); } } - return ret; + + return ok; } +bool vmstate_save_vmsd(QEMUFile *f, const VMStateDescription *vmsd, + void *opaque, JSONWriter *vmdesc_id, Error **errp) +{ + return vmstate_save_vmsd_v(f, vmsd, opaque, vmdesc_id, vmsd->version_id, + errp); +} + + static const VMStateDescription * vmstate_get_subsection(const VMStateDescription * const *sub, const char *idstr) @@ -637,7 +640,7 @@ static bool vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd, if (strncmp(vmsd->name, idstr, strlen(vmsd->name)) != 0) { trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(prefix)"); /* it doesn't have a valid subsection name */ - return 0; + return true; } sub_vmsd = vmstate_get_subsection(vmsd->subsections, idstr); if (sub_vmsd == NULL) { -- 2.48.1
