Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2227482/?format=api
{ "id": 2227482, "url": "http://patchwork.ozlabs.org/api/patches/2227482/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423191958.1440-16-farosas@suse.de/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260423191958.1440-16-farosas@suse.de>", "list_archive_url": null, "date": "2026-04-23T19:19:29", "name": "[PULL,15/43] migration: introduce vmstate_load_vmsd() and vmstate_save_vmsd()", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "5d748b9de626f8ef9b19457340af2efe58ac6e7a", "submitter": { "id": 85343, "url": "http://patchwork.ozlabs.org/api/people/85343/?format=api", "name": "Fabiano Rosas", "email": "farosas@suse.de" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423191958.1440-16-farosas@suse.de/mbox/", "series": [ { "id": 501236, "url": "http://patchwork.ozlabs.org/api/series/501236/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501236", "date": "2026-04-23T19:19:14", "name": "[PULL,01/43] checkpatch: Allow spaces after all coroutine annotations", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/501236/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2227482/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2227482/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=Olxu/mrj;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=WBszDAVG;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=Olxu/mrj;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=WBszDAVG;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)", "smtp-out1.suse.de;\n dkim=pass header.d=suse.de header.s=susede2_rsa header.b=\"Olxu/mrj\";\n dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=WBszDAVG" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g1mJ92xWmz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 05:24:57 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wFzcM-0003Fj-1C; Thu, 23 Apr 2026 15:21:42 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <farosas@suse.de>) id 1wFzc8-0002O8-V2\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 15:21:31 -0400", "from smtp-out1.suse.de ([195.135.223.130])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <farosas@suse.de>) id 1wFzc6-0001xm-GJ\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 15:21:28 -0400", "from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org\n [IPv6:2a07:de40:b281:104:10:150:64:97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out1.suse.de (Postfix) with ESMTPS id 0F1556A8A6;\n Thu, 23 Apr 2026 19:20:23 +0000 (UTC)", "from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 0A7EA593A3;\n Thu, 23 Apr 2026 19:20:21 +0000 (UTC)", "from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id kFo4MvVw6mlJCwAAD6G6ig\n (envelope-from <farosas@suse.de>); Thu, 23 Apr 2026 19:20:21 +0000" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776972023;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=OtUkCGsNiesst2i1bvrl5h5U1TI8T4XQdvIydALDlWc=;\n b=Olxu/mrj4BgxuahMT6bSIpxfh37YAOcjUIsTx3JJGur+/PGdtmYKLHRP49ToY0idscML6C\n MEFazHSQIripAVg+jY/1I5/TkCThLnPoBkO1+sbAgfREbNmZPnOWO/H+CL05KgcbtvThPd\n ZejaTL6oAumNg2Jf3DtNlzbJe1K76Es=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776972023;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=OtUkCGsNiesst2i1bvrl5h5U1TI8T4XQdvIydALDlWc=;\n b=WBszDAVG89IxwatMGXhE3nIegEdZwhtgYiIn6uD+oGy7Qrvqv1JhuAkQJMj643Ld6K91yk\n DGTW/nsdzDMPu5Ag==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1776972023;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=OtUkCGsNiesst2i1bvrl5h5U1TI8T4XQdvIydALDlWc=;\n b=Olxu/mrj4BgxuahMT6bSIpxfh37YAOcjUIsTx3JJGur+/PGdtmYKLHRP49ToY0idscML6C\n MEFazHSQIripAVg+jY/1I5/TkCThLnPoBkO1+sbAgfREbNmZPnOWO/H+CL05KgcbtvThPd\n ZejaTL6oAumNg2Jf3DtNlzbJe1K76Es=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1776972023;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=OtUkCGsNiesst2i1bvrl5h5U1TI8T4XQdvIydALDlWc=;\n b=WBszDAVG89IxwatMGXhE3nIegEdZwhtgYiIn6uD+oGy7Qrvqv1JhuAkQJMj643Ld6K91yk\n DGTW/nsdzDMPu5Ag==" ], "From": "Fabiano Rosas <farosas@suse.de>", "To": "qemu-devel@nongnu.org", "Cc": "Peter Xu <peterx@redhat.com>,\n Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>", "Subject": "[PULL 15/43] migration: introduce vmstate_load_vmsd() and\n vmstate_save_vmsd()", "Date": "Thu, 23 Apr 2026 16:19:29 -0300", "Message-ID": "<20260423191958.1440-16-farosas@suse.de>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260423191958.1440-1-farosas@suse.de>", "References": "<20260423191958.1440-1-farosas@suse.de>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Rspamd-Action": "no action", "X-Rspamd-Server": "rspamd2.dmz-prg2.suse.org", "X-Spamd-Result": "default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%];\n NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[];\n R_MISSING_CHARSET(0.50)[];\n R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n MX_GOOD(-0.01)[]; ARC_NA(0.00)[];\n FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_COUNT_TWO(0.00)[2];\n MIME_TRACE(0.00)[0:+]; RCVD_VIA_SMTP_AUTH(0.00)[];\n SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n TO_DN_SOME(0.00)[];\n RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received];\n FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];\n DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid,suse.de:email,imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns];\n RCVD_TLS_ALL(0.00)[]; FROM_EQ_ENVFROM(0.00)[];\n RCPT_COUNT_THREE(0.00)[3];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n DKIM_TRACE(0.00)[suse.de:+]", "X-Rspamd-Queue-Id": "0F1556A8A6", "X-Spam-Score": "-3.01", "Received-SPF": "pass client-ip=195.135.223.130; envelope-from=farosas@suse.de;\n helo=smtp-out1.suse.de", "X-Spam_score_int": "-43", "X-Spam_score": "-4.4", "X-Spam_bar": "----", "X-Spam_report": "(-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "From: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>\n\nIntroduce new APIs, returning bool.\nThe analysis\nhttps://lore.kernel.org/qemu-devel/aQDdRn8t0B8oE3gf@x1.local/\nshows, that vmstate_load_state() return value actually only\nused to check for success, specific errno values doesn't make\nsense.\n\nWith this commit we introduce new functions with modern bool\ninterface, and in following commits we'll update the\ncode base to use them, starting from migration/ code, and\nfinally we will remove old vmstate_load_state() and\nvmstate_save_state().\n\nThis patch reworks existing functions to new one, so that\nold interfaces are simple wrappers, which will be easy to\nremove later.\n\nSigned-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>\nReviewed-by: Peter Xu <peterx@redhat.com>\nLink: https://lore.kernel.org/qemu-devel/20260304212303.667141-14-vsementsov@yandex-team.ru\nSigned-off-by: Fabiano Rosas <farosas@suse.de>\n---\n include/migration/vmstate.h | 9 ++++\n migration/vmstate.c | 89 ++++++++++++++++++++-----------------\n 2 files changed, 58 insertions(+), 40 deletions(-)", "diff": "diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h\nindex 65683d8d87..66c2e87bd3 100644\n--- a/include/migration/vmstate.h\n+++ b/include/migration/vmstate.h\n@@ -1257,10 +1257,19 @@ extern const VMStateInfo vmstate_info_qlist;\n .flags = VMS_END, \\\n }\n \n+/*\n+ * vmstate_load_state() and vmstate_save_state() are\n+ * depreacated, use vmstate_load_vmsd() and vmstate_save_vmsd()\n+ * instead.\n+ */\n int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, int version_id, Error **errp);\n int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, JSONWriter *vmdesc, Error **errp);\n+bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd,\n+ void *opaque, int version_id, Error **errp);\n+bool vmstate_save_vmsd(QEMUFile *f, const VMStateDescription *vmsd,\n+ void *opaque, JSONWriter *vmdesc, Error **errp);\n \n bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque);\n \ndiff --git a/migration/vmstate.c b/migration/vmstate.c\nindex f16626d7d1..e98b5f5346 100644\n--- a/migration/vmstate.c\n+++ b/migration/vmstate.c\n@@ -26,7 +26,7 @@ static bool vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,\n Error **errp);\n static bool vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, Error **errp);\n-static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,\n+static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, JSONWriter *vmdesc,\n int version_id, Error **errp);\n \n@@ -165,11 +165,11 @@ static bool vmstate_load_field(QEMUFile *f, void *pv, size_t size,\n const VMStateField *field, Error **errp)\n {\n if (field->flags & VMS_STRUCT) {\n- return vmstate_load_state(f, field->vmsd, pv, field->vmsd->version_id,\n- errp) >= 0;\n+ return vmstate_load_vmsd(f, field->vmsd, pv, field->vmsd->version_id,\n+ errp);\n } else if (field->flags & VMS_VSTRUCT) {\n- return vmstate_load_state(f, field->vmsd, pv, field->struct_version_id,\n- errp) >= 0;\n+ return vmstate_load_vmsd(f, field->vmsd, pv, field->struct_version_id,\n+ errp);\n } else if (field->info->load) {\n return field->info->load(f, pv, size, field, errp);\n }\n@@ -211,12 +211,11 @@ static bool vmstate_post_load(const VMStateDescription *vmsd,\n return true;\n }\n \n-int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n+bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, int version_id, Error **errp)\n {\n ERRP_GUARD();\n const VMStateField *field = vmsd->fields;\n- int ret = 0;\n \n trace_vmstate_load_state(vmsd->name, version_id);\n \n@@ -225,7 +224,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n \"for local version_id %d\",\n vmsd->name, version_id, vmsd->version_id);\n trace_vmstate_load_state_fail(vmsd->name, \"too new\");\n- return -EINVAL;\n+ return false;\n }\n \n if (version_id < vmsd->minimum_version_id) {\n@@ -233,11 +232,11 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n \"for local minimum version_id %d\",\n vmsd->name, version_id, vmsd->minimum_version_id);\n trace_vmstate_load_state_fail(vmsd->name, \"too old\");\n- return -EINVAL;\n+ return false;\n }\n \n if (!vmstate_pre_load(vmsd, opaque, errp)) {\n- return -EINVAL;\n+ return false;\n }\n \n while (field->name) {\n@@ -257,6 +256,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n }\n \n for (i = 0; i < n_elems; i++) {\n+ bool ok;\n void *curr_elem = first_elem + size * i;\n const VMStateField *inner_field;\n \n@@ -275,33 +275,32 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n inner_field = field;\n }\n \n- ret = vmstate_load_field(f, curr_elem, size, inner_field,\n- errp) ? 0 : -EINVAL;\n+ ok = vmstate_load_field(f, curr_elem, size, inner_field, errp);\n \n /* If we used a fake temp field.. free it now */\n if (inner_field != field) {\n g_clear_pointer((gpointer *)&inner_field, g_free);\n }\n \n- if (ret >= 0) {\n- ret = qemu_file_get_error(f);\n+ if (ok) {\n+ int ret = qemu_file_get_error(f);\n if (ret < 0) {\n error_setg(errp,\n \"Failed to load %s state: stream error: %d\",\n vmsd->name, ret);\n trace_vmstate_load_field_error(field->name, ret);\n- return ret;\n+ return false;\n }\n } else {\n- qemu_file_set_error(f, ret);\n- trace_vmstate_load_field_error(field->name, ret);\n- return ret;\n+ qemu_file_set_error(f, -EINVAL);\n+ trace_vmstate_load_field_error(field->name, -EINVAL);\n+ return false;\n }\n }\n } else if (field->flags & VMS_MUST_EXIST) {\n error_setg(errp, \"Input validation failed: %s/%s version_id: %d\",\n vmsd->name, field->name, vmsd->version_id);\n- return -1;\n+ return false;\n }\n field++;\n }\n@@ -309,17 +308,16 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n \n if (!vmstate_subsection_load(f, vmsd, opaque, errp)) {\n qemu_file_set_error(f, -EINVAL);\n- return -EINVAL;\n+ return false;\n }\n \n if (!vmstate_post_load(vmsd, opaque, version_id, errp)) {\n trace_vmstate_load_state_fail(vmsd->name, \"post-load\");\n- return -EINVAL;\n+ return false;\n }\n \n trace_vmstate_load_state_success(vmsd->name);\n-\n- return 0;\n+ return true;\n }\n \n static int vmfield_name_num(const VMStateField *start,\n@@ -492,11 +490,10 @@ static bool vmstate_save_field(QEMUFile *f, void *pv, size_t size,\n JSONWriter *vmdesc, Error **errp)\n {\n if (field->flags & VMS_STRUCT) {\n- return vmstate_save_state(f, field->vmsd, pv, vmdesc, errp) >= 0;\n+ return vmstate_save_vmsd(f, field->vmsd, pv, vmdesc, errp);\n } else if (field->flags & VMS_VSTRUCT) {\n- return vmstate_save_state_v(f, field->vmsd, pv, vmdesc,\n- field->struct_version_id,\n- errp) >= 0;\n+ return vmstate_save_vmsd_v(f, field->vmsd, pv, vmdesc,\n+ field->struct_version_id, errp);\n } else if (field->info->save) {\n return field->info->save(f, pv, size, field, vmdesc, errp);\n }\n@@ -509,19 +506,19 @@ static bool vmstate_save_field(QEMUFile *f, void *pv, size_t size,\n return true;\n }\n \n-static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,\n+static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, JSONWriter *vmdesc,\n int version_id, Error **errp)\n {\n ERRP_GUARD();\n- int ret = 0;\n+ bool ok = true;\n const VMStateField *field = vmsd->fields;\n \n trace_vmstate_save_state_top(vmsd->name);\n \n if (!vmstate_pre_save(vmsd, opaque, errp)) {\n trace_vmstate_save_state_pre_save_fail(vmsd->name);\n- return -EINVAL;\n+ return false;\n }\n \n trace_vmstate_save_state_pre_save_success(vmsd->name);\n@@ -602,8 +599,8 @@ static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,\n vmsd_desc_field_start(vmsd, vmdesc_loop, inner_field,\n i, max_elems);\n \n- ret = vmstate_save_field(f, curr_elem, size, inner_field,\n- vmdesc_loop, errp) ? 0 : -EINVAL;\n+ ok = vmstate_save_field(f, curr_elem, size, inner_field,\n+ vmdesc_loop, errp);\n \n written_bytes = qemu_file_transferred(f) - old_offset;\n vmsd_desc_field_end(vmsd, vmdesc_loop, inner_field,\n@@ -614,7 +611,7 @@ static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,\n g_clear_pointer((gpointer *)&inner_field, g_free);\n }\n \n- if (ret) {\n+ if (!ok) {\n error_prepend(errp, \"Save of field %s/%s failed: \",\n vmsd->name, field->name);\n goto out;\n@@ -640,13 +637,13 @@ static int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,\n json_writer_end_array(vmdesc);\n }\n \n- ret = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp) ? 0 : -EINVAL;\n+ ok = vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp);\n \n out:\n if (vmsd->post_save) {\n vmsd->post_save(opaque);\n }\n- return ret;\n+ return ok;\n }\n \n static const VMStateDescription *\n@@ -663,11 +660,11 @@ vmstate_get_subsection(const VMStateDescription * const *sub,\n return NULL;\n }\n \n-int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,\n+bool vmstate_save_vmsd(QEMUFile *f, const VMStateDescription *vmsd,\n void *opaque, JSONWriter *vmdesc_id, Error **errp)\n {\n- return vmstate_save_state_v(f, vmsd, opaque, vmdesc_id, vmsd->version_id,\n- errp);\n+ return vmstate_save_vmsd_v(f, vmsd, opaque, vmdesc_id, vmsd->version_id,\n+ errp);\n }\n \n static bool vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,\n@@ -712,7 +709,7 @@ static bool vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,\n qemu_file_skip(f, len); /* idstr */\n version_id = qemu_get_be32(f);\n \n- if (vmstate_load_state(f, sub_vmsd, opaque, version_id, errp) < 0) {\n+ if (!vmstate_load_vmsd(f, sub_vmsd, opaque, version_id, errp)) {\n trace_vmstate_subsection_load_bad(vmsd->name, idstr, \"(child)\");\n error_prepend(errp,\n \"Loading VM subsection '%s' in '%s' failed: \",\n@@ -754,7 +751,7 @@ static bool vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,\n qemu_put_byte(f, len);\n qemu_put_buffer(f, (uint8_t *)vmsdsub->name, len);\n qemu_put_be32(f, vmsdsub->version_id);\n- if (vmstate_save_state(f, vmsdsub, opaque, vmdesc, errp) < 0) {\n+ if (!vmstate_save_vmsd(f, vmsdsub, opaque, vmdesc, errp)) {\n return false;\n }\n \n@@ -771,3 +768,15 @@ static bool vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,\n \n return true;\n }\n+\n+int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,\n+ void *opaque, JSONWriter *vmdesc_id, Error **errp)\n+{\n+ return vmstate_save_vmsd(f, vmsd, opaque, vmdesc_id, errp) ? 0 : -EINVAL;\n+}\n+\n+int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,\n+ void *opaque, int version_id, Error **errp)\n+{\n+ return vmstate_load_vmsd(f, vmsd, opaque, version_id, errp) ? 0 : -EINVAL;\n+}\n", "prefixes": [ "PULL", "15/43" ] }