@samitouri / QOSamiQemu / commits / 418fcff2b4

migration: factor out vmstate_pre_save() from vmstate_save_state()

Simplify vmstate_save_state() which is rather big, and simplify further refactoring. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Reviewed-by: Peter Xu <peterx@redhat.com> Link: https://lore.kernel.org/qemu-devel/20260304212303.667141-7-vsementsov@yandex-team.ru Signed-off-by: Fabiano Rosas <farosas@suse.de>

Vladimir Sementsov-Ogievskiy committed Mar 5, 2026 at 00:22 UTC 418fcff2b44fc6ce79464698375cd5837913d461
1 file changed +23 -14
migration/vmstate.c
+23 -14
@@ -435,6 +435,26 @@ bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque)
435 return true;
436 }
437
438 +static bool vmstate_pre_save(const VMStateDescription *vmsd, void *opaque,
439 + Error **errp)
440 +{
441 + ERRP_GUARD();
442 +
443 + if (vmsd->pre_save_errp) {
444 + if (!vmsd->pre_save_errp(opaque, errp)) {
445 + error_prepend(errp, "pre-save for %s failed: ", vmsd->name);
446 + return false;
447 + }
448 + } else if (vmsd->pre_save) {
449 + if (vmsd->pre_save(opaque) < 0) {
450 + error_setg(errp, "pre-save failed: %s", vmsd->name);
451 + return false;
452 + }
453 + }
454 +
455 + return true;
456 +}
457 +
458 static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
459 void *opaque, JSONWriter *vmdesc,
460 int version_id, Error **errp)
@@ -445,20 +465,9 @@ static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
465
466 trace_vmstate_save_state_top(vmsd->name);
467
448 - if (vmsd->pre_save_errp) {
449 - ret = vmsd->pre_save_errp(opaque, errp) ? 0 : -EINVAL;
450 - if (ret < 0) {
451 - error_prepend(errp, "pre-save for %s failed: ", vmsd->name);
452 - trace_vmstate_save_state_pre_save_fail(vmsd->name);
453 - return ret;
454 - }
455 - } else if (vmsd->pre_save) {
456 - ret = vmsd->pre_save(opaque);
457 - if (ret) {
458 - error_setg(errp, "pre-save failed: %s", vmsd->name);
459 - trace_vmstate_save_state_pre_save_fail(vmsd->name);
460 - return ret;
461 - }
468 + if (!vmstate_pre_save(vmsd, opaque, errp)) {
469 + trace_vmstate_save_state_pre_save_fail(vmsd->name);
470 + return -EINVAL;
471 }
472
473 trace_vmstate_save_state_pre_save_success(vmsd->name);