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);