From nobody Tue Nov 18 22:48:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612807649; cv=none; d=zohomail.com; s=zohoarc; b=gn7HMNLUIfMlS5sUWO20TkjO2TCwvSSxLjnlIjOjSN/GUWLGi6Z3VZdSSjgUl4orlPb+cK5Wmmh027PoBJ9wS5ZPaJliyPvvDh4A33NRplscJGyaC9uNkQf24N+KtZpZydGFxddQ9xDjXJaPHh1KOXFWn6UyBZntHUCoE2/LRPU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612807649; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WNqQ61MxKAwkshpQmFEnQMG/0nilqU1OBrOuTsNAknM=; b=YALL4B7Rk4rHXLNkkO6lScd47iJhNEkWLS8PNl0fLpyyqPz0VD6FsUyBszAOZOhwxANm9Qklr66l5jii6ql0BK4cuxOPlyt2UpBFD91oxS4GPHNFqJInkyy8HvH9O2tyV9dM1TdHi3km77ZPfmF+RbHjzb+gWXEbuNnGZMz2MNQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612807649761389.1624731659151; Mon, 8 Feb 2021 10:07:29 -0800 (PST) Received: from localhost ([::1]:54264 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9Awa-0007wU-Di for importer@patchew.org; Mon, 08 Feb 2021 13:07:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:45506) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l94l3-00022I-4K for qemu-devel@nongnu.org; Mon, 08 Feb 2021 06:31:15 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:58369) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l94kl-0002VC-9s for qemu-devel@nongnu.org; Mon, 08 Feb 2021 06:31:08 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-300-jztkke4aM6aB-aq75nQTCg-1; Mon, 08 Feb 2021 06:30:43 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C2A3F80403F; Mon, 8 Feb 2021 11:30:42 +0000 (UTC) Received: from dgilbert-t580.localhost (ovpn-115-22.ams2.redhat.com [10.36.115.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id E0232101E243; Mon, 8 Feb 2021 11:30:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612783846; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WNqQ61MxKAwkshpQmFEnQMG/0nilqU1OBrOuTsNAknM=; b=bjKFKC0NQg0M4+Pmw2OojEGAD38pYUAQShLafRhGqIs+83dPTB6bn7meUH60VnX/VXFQke bCWu5N8HRGR1B9tHbklDNk/sEZLPDO/FOunshgDYb8/yvU8tQRNNM7zWxB0sszvfbUow8R UDbnXMxK7lth31Yq6H4RgxgDWtzzD0E= X-MC-Unique: jztkke4aM6aB-aq75nQTCg-1 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org, andrey.gruzdev@virtuozzo.com, berrange@redhat.com, gaojinhao@huawei.com, armbru@redhat.com, mst@redhat.com, philmd@redhat.com, wainersm@redhat.com, s.reiter@proxmox.com Subject: [PULL 19/27] block: allow specifying name of block device for vmstate storage Date: Mon, 8 Feb 2021 11:29:10 +0000 Message-Id: <20210208112918.185058-20-dgilbert@redhat.com> In-Reply-To: <20210208112918.185058-1-dgilbert@redhat.com> References: <20210208112918.185058-1-dgilbert@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dgilbert@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=dgilbert@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.569, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) From: Daniel P. Berrang=C3=A9 Currently the vmstate will be stored in the first block device that supports snapshots. Historically this would have usually been the root device, but with UEFI it might be the variable store. There needs to be a way to override the choice of block device to store the state in. Reviewed-by: Eric Blake Signed-off-by: Daniel P. Berrang=C3=A9 Message-Id: <20210204124834.774401-6-berrange@redhat.com> Signed-off-by: Dr. David Alan Gilbert --- block/monitor/block-hmp-cmds.c | 2 +- block/snapshot.c | 26 +++++++++++++++++++++++--- include/block/snapshot.h | 3 ++- migration/savevm.c | 4 ++-- replay/replay-debugging.c | 2 +- tests/qemu-iotests/267.out | 12 ++++++------ 6 files changed, 35 insertions(+), 14 deletions(-) diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index e15121be1f..9cc5d4b51e 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -902,7 +902,7 @@ void hmp_info_snapshots(Monitor *mon, const QDict *qdic= t) SnapshotEntry *snapshot_entry; Error *err =3D NULL; =20 - bs =3D bdrv_all_find_vmstate_bs(false, NULL, &err); + bs =3D bdrv_all_find_vmstate_bs(NULL, false, NULL, &err); if (!bs) { error_report_err(err); return; diff --git a/block/snapshot.c b/block/snapshot.c index 220173deae..0b129bee8f 100644 --- a/block/snapshot.c +++ b/block/snapshot.c @@ -678,7 +678,9 @@ int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn, return 0; } =20 -BlockDriverState *bdrv_all_find_vmstate_bs(bool has_devices, strList *devi= ces, + +BlockDriverState *bdrv_all_find_vmstate_bs(const char *vmstate_bs, + bool has_devices, strList *devi= ces, Error **errp) { g_autoptr(GList) bdrvs =3D NULL; @@ -699,13 +701,31 @@ BlockDriverState *bdrv_all_find_vmstate_bs(bool has_d= evices, strList *devices, bdrv_can_snapshot(bs); aio_context_release(ctx); =20 - if (found) { + if (vmstate_bs) { + if (g_str_equal(vmstate_bs, + bdrv_get_node_name(bs))) { + if (found) { + return bs; + } else { + error_setg(errp, + "vmstate block device '%s' does not support= snapshots", + vmstate_bs); + return NULL; + } + } + } else if (found) { return bs; } =20 iterbdrvs =3D iterbdrvs->next; } =20 - error_setg(errp, "No block device supports snapshots"); + if (vmstate_bs) { + error_setg(errp, + "vmstate block device '%s' does not exist", vmstate_bs); + } else { + error_setg(errp, + "no block device can store vmstate for snapshot"); + } return NULL; } diff --git a/include/block/snapshot.h b/include/block/snapshot.h index 2569a903f2..8a6a37240d 100644 --- a/include/block/snapshot.h +++ b/include/block/snapshot.h @@ -95,7 +95,8 @@ int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn, strList *devices, Error **errp); =20 -BlockDriverState *bdrv_all_find_vmstate_bs(bool has_devices, strList *devi= ces, +BlockDriverState *bdrv_all_find_vmstate_bs(const char *vmstate_bs, + bool has_devices, strList *devi= ces, Error **errp); =20 #endif diff --git a/migration/savevm.c b/migration/savevm.c index 0dbe8c1607..cdd201e7f8 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2797,7 +2797,7 @@ bool save_snapshot(const char *name, Error **errp) } } =20 - bs =3D bdrv_all_find_vmstate_bs(false, NULL, errp); + bs =3D bdrv_all_find_vmstate_bs(NULL, false, NULL, errp); if (bs =3D=3D NULL) { return false; } @@ -2982,7 +2982,7 @@ bool load_snapshot(const char *name, Error **errp) return false; } =20 - bs_vm_state =3D bdrv_all_find_vmstate_bs(false, NULL, errp); + bs_vm_state =3D bdrv_all_find_vmstate_bs(NULL, false, NULL, errp); if (!bs_vm_state) { return false; } diff --git a/replay/replay-debugging.c b/replay/replay-debugging.c index 67d8237077..ca37cf4025 100644 --- a/replay/replay-debugging.c +++ b/replay/replay-debugging.c @@ -148,7 +148,7 @@ static char *replay_find_nearest_snapshot(int64_t icoun= t, =20 *snapshot_icount =3D -1; =20 - bs =3D bdrv_all_find_vmstate_bs(false, NULL, NULL); + bs =3D bdrv_all_find_vmstate_bs(NULL, false, NULL, NULL); if (!bs) { goto fail; } diff --git a/tests/qemu-iotests/267.out b/tests/qemu-iotests/267.out index 6149029b25..7176e376e1 100644 --- a/tests/qemu-iotests/267.out +++ b/tests/qemu-iotests/267.out @@ -6,11 +6,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D13421= 7728 Testing: QEMU X.Y.Z monitor - type 'help' for more information (qemu) savevm snap0 -Error: No block device supports snapshots +Error: no block device can store vmstate for snapshot (qemu) info snapshots -No block device supports snapshots +no block device can store vmstate for snapshot (qemu) loadvm snap0 -Error: No block device supports snapshots +Error: no block device can store vmstate for snapshot (qemu) quit =20 =20 @@ -22,7 +22,7 @@ QEMU X.Y.Z monitor - type 'help' for more information (qemu) savevm snap0 Error: Device 'none0' is writable but does not support snapshots (qemu) info snapshots -No block device supports snapshots +no block device can store vmstate for snapshot (qemu) loadvm snap0 Error: Device 'none0' is writable but does not support snapshots (qemu) quit @@ -58,7 +58,7 @@ QEMU X.Y.Z monitor - type 'help' for more information (qemu) savevm snap0 Error: Device 'virtio0' is writable but does not support snapshots (qemu) info snapshots -No block device supports snapshots +no block device can store vmstate for snapshot (qemu) loadvm snap0 Error: Device 'virtio0' is writable but does not support snapshots (qemu) quit @@ -83,7 +83,7 @@ QEMU X.Y.Z monitor - type 'help' for more information (qemu) savevm snap0 Error: Device 'file' is writable but does not support snapshots (qemu) info snapshots -No block device supports snapshots +no block device can store vmstate for snapshot (qemu) loadvm snap0 Error: Device 'file' is writable but does not support snapshots (qemu) quit --=20 2.29.2