Simplify vmstate_save_state() which is rather big, and simplify further refactoring.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- migration/vmstate.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index b07bbdd366..810b131f18 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -430,6 +430,26 @@ bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque) return true; } +static bool vmstate_pre_save(const VMStateDescription *vmsd, void *opaque, + Error **errp) +{ + ERRP_GUARD(); + + if (vmsd->pre_save_errp) { + if (!vmsd->pre_save_errp(opaque, errp)) { + error_prepend(errp, "pre-save for %s failed: ", vmsd->name); + return false; + } + } else if (vmsd->pre_save) { + if (vmsd->pre_save(opaque) < 0) { + error_setg(errp, "pre-save failed: %s", vmsd->name); + return false; + } + } + + return true; +} + static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, JSONWriter *vmdesc, int version_id, Error **errp) @@ -440,18 +460,8 @@ static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, trace_vmstate_save_state_top(vmsd->name); - if (vmsd->pre_save_errp) { - ret = vmsd->pre_save_errp(opaque, errp) ? 0 : -EINVAL; - if (ret < 0) { - error_prepend(errp, "pre-save for %s failed: ", vmsd->name); - return ret; - } - } else if (vmsd->pre_save) { - ret = vmsd->pre_save(opaque); - if (ret) { - error_setg(errp, "pre-save failed: %s", vmsd->name); - return ret; - } + if (!vmstate_pre_save(vmsd, opaque, errp)) { + return -EINVAL; } trace_vmstate_save_state_pre_save_done(vmsd->name); -- 2.52.0
