migration: factor out vmstate_pre_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-9-vsementsov@yandex-team.ru Signed-off-by: Fabiano Rosas <farosas@suse.de>
Vladimir Sementsov-Ogievskiy committed
Mar 5, 2026 at 00:22 UTC
4318d870e4cbc16784758a77e3f2822bf90ca246
1 file changed
+29
-17
migration/vmstate.c
+29
-17
@@ -134,6 +134,33 @@ static void vmstate_handle_alloc(void *ptr, const VMStateField *field,
134
}
135
}
136
137
+static bool vmstate_pre_load(const VMStateDescription *vmsd, void *opaque,
138
+ Error **errp)
139
+{
140
+ ERRP_GUARD();
141
+
142
+ if (vmsd->pre_load_errp) {
143
+ if (!vmsd->pre_load_errp(opaque, errp)) {
144
+ error_prepend(errp, "pre load hook failed for: '%s', "
145
+ "version_id: %d, minimum version_id: %d: ",
146
+ vmsd->name, vmsd->version_id,
147
+ vmsd->minimum_version_id);
148
+ return false;
149
+ }
150
+ } else if (vmsd->pre_load) {
151
+ int ret = vmsd->pre_load(opaque);
152
+ if (ret) {
153
+ error_setg(errp, "pre load hook failed for: '%s', "
154
+ "version_id: %d, minimum version_id: %d, ret: %d",
155
+ vmsd->name, vmsd->version_id, vmsd->minimum_version_id,
156
+ ret);
157
+ return false;
158
+ }
159
+ }
160
+
161
+ return true;
162
+}
163
+
164
int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
165
void *opaque, int version_id, Error **errp)
166
{
@@ -159,23 +186,8 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
186
return -EINVAL;
187
}
188
162
- if (vmsd->pre_load_errp) {
163
- if (!vmsd->pre_load_errp(opaque, errp)) {
164
- error_prepend(errp, "pre load hook failed for: '%s', "
165
- "version_id: %d, minimum version_id: %d: ",
166
- vmsd->name, vmsd->version_id,
167
- vmsd->minimum_version_id);
168
- return -EINVAL;
169
- }
170
- } else if (vmsd->pre_load) {
171
- ret = vmsd->pre_load(opaque);
172
- if (ret) {
173
- error_setg(errp, "pre load hook failed for: '%s', "
174
- "version_id: %d, minimum version_id: %d, ret: %d",
175
- vmsd->name, vmsd->version_id, vmsd->minimum_version_id,
176
- ret);
177
- return ret;
178
- }
189
+ if (!vmstate_pre_load(vmsd, opaque, errp)) {
190
+ return -EINVAL;
191
}
192
193
while (field->name) {