On 20.10.25 16:49, Peter Xu wrote:
On Mon, Oct 20, 2025 at 12:19:07PM +0300, Vladimir Sementsov-Ogievskiy wrote:
@@ -255,13 +252,12 @@ int vmstate_load_state(QEMUFile *f, const 
VMStateDescription *vmsd,
          qemu_file_set_error(f, ret);
          return ret;
      }
-    if (vmsd->post_load_errp) {
-        ret = vmsd->post_load_errp(opaque, version_id, errp);
-        if (ret < 0) {
-            error_prepend(errp, "post load hook failed for: %s, version_id: "
-                          "%d, minimum_version: %d, ret: %d: ", vmsd->name,
-                          vmsd->version_id, vmsd->minimum_version_id, ret);
-        }
+    if (vmsd->post_load_errp && !vmsd->post_load_errp(opaque, version_id,

I think this will change the semantics even if I do not expect a real user
to exist.. if post_load_errp() returned true here, then it'll keep looking
for post_load() and execute.

It might still be good to keep the old semantics, so that if
post_load_errp() is provided, then we ignore post_load().  Same to the rest
hooks.


Oh, right.

+                                                      errp)) {
+        error_prepend(errp, "post load hook failed for: %s, version_id: "
+                      "%d, minimum_version: %d, ret: %d: ", vmsd->name,
+                      vmsd->version_id, vmsd->minimum_version_id, ret);
+        ret = -EINVAL;
      } else if (vmsd->post_load) {
          ret = vmsd->post_load(opaque, version_id);
          if (ret < 0) {
@@ -438,9 +434,8 @@ int vmstate_save_state_v(QEMUFile *f, const 
VMStateDescription *vmsd,
      trace_vmstate_save_state_top(vmsd->name);
if (vmsd->pre_save_errp) {
-        ret = vmsd->pre_save_errp(opaque, errp);
          trace_vmstate_save_state_pre_save_res(vmsd->name, ret);
-        if (ret < 0) {
+        if (!vmsd->pre_save_errp(opaque, errp)) {
              error_prepend(errp, "pre-save for %s failed, ret: %d: ",
                            vmsd->name, ret);
          }
--
2.48.1




--
Best regards,
Vladimir

Reply via email to