@samitouri / QOSamiQemu / commits / 4318d870e4

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