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
