migration: factor out vmstate_post_load() from vmstate_load_state()
Simplify vmstate_load_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-11-vsementsov@yandex-team.ru Signed-off-by: Fabiano Rosas <farosas@suse.de>
Vladimir Sementsov-Ogievskiy committed
Mar 5, 2026 at 00:22 UTC
9b223e809d2ab21feffed65282876af30c0e71d8
1 file changed
+30
-19
migration/vmstate.c
+30
-19
@@ -182,6 +182,33 @@ static bool vmstate_load_field(QEMUFile *f, void *pv, size_t size,
182
return true;
183
}
184
185
+static bool vmstate_post_load(const VMStateDescription *vmsd,
186
+ void *opaque, int version_id, Error **errp)
187
+{
188
+ ERRP_GUARD();
189
+
190
+ if (vmsd->post_load_errp) {
191
+ if (!vmsd->post_load_errp(opaque, version_id, errp)) {
192
+ error_prepend(errp, "post load hook failed for: %s, version_id: "
193
+ "%d, minimum_version: %d: ", vmsd->name,
194
+ vmsd->version_id, vmsd->minimum_version_id);
195
+ return false;
196
+ }
197
+ } else if (vmsd->post_load) {
198
+ int ret = vmsd->post_load(opaque, version_id);
199
+ if (ret < 0) {
200
+ error_setg(errp,
201
+ "post load hook failed for: %s, version_id: %d, "
202
+ "minimum_version: %d, ret: %d",
203
+ vmsd->name, vmsd->version_id, vmsd->minimum_version_id,
204
+ ret);
205
+ return false;
206
+ }
207
+ }
208
+
209
+ return true;
210
+}
211
+
212
int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
213
void *opaque, int version_id, Error **errp)
214
{
@@ -284,25 +311,9 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
311
return ret;
312
}
313
287
- if (vmsd->post_load_errp) {
288
- if (!vmsd->post_load_errp(opaque, version_id, errp)) {
289
- error_prepend(errp, "post load hook failed for: %s, version_id: "
290
- "%d, minimum_version: %d: ", vmsd->name,
291
- vmsd->version_id, vmsd->minimum_version_id);
292
- trace_vmstate_load_state_fail(vmsd->name, "post-load");
293
- return -EINVAL;
294
- }
295
- } else if (vmsd->post_load) {
296
- ret = vmsd->post_load(opaque, version_id);
297
- if (ret < 0) {
298
- error_setg(errp,
299
- "post load hook failed for: %s, version_id: %d, "
300
- "minimum_version: %d, ret: %d",
301
- vmsd->name, vmsd->version_id, vmsd->minimum_version_id,
302
- ret);
303
- trace_vmstate_load_state_fail(vmsd->name, "post-load");
304
- return ret;
305
- }
314
+ if (!vmstate_post_load(vmsd, opaque, version_id, errp)) {
315
+ trace_vmstate_load_state_fail(vmsd->name, "post-load");
316
+ return -EINVAL;
317
}
318
319
trace_vmstate_load_state_success(vmsd->name);