From nobody Tue Nov 18 22:49:01 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=1612802872; cv=none; d=zohomail.com; s=zohoarc; b=Cac+eTmxNhHIY8RMRlxQk0B6zN6upIgHFDjhh7Lypdqn/pjpGJM6toppqWGZeRg/4KrNcRV+pBja6gIn5C4aMR/RhxTCMuUJwGGKB5s6zCXjR2aT1R3GNeC1D2BXTFgCFLeHM1OdtIiodj469uwjrJwde5/2PedpUFf8adVdFVs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612802872; 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=JBf3eWgiLWA6nL1pLM/+sbON6jwD7Wcx8WkvDMmbEqM=; b=Md2WGFqwJahhzLOdCv92fy8+zNRPAuVKU5uMSYaT0ayJeLP7qJagHroR8U4bnqQRJp+ifPFBmev2Kpe1/yEQ7VYHla8aawhUtskPrR/+VpxSlmFq1WvUTGiaF5OuHHxTiZsX+YJ3/EGD6SgFXs/P1T8FoOH5dwv4MJOc78o2ny4= 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 1612802872933893.774905905406; Mon, 8 Feb 2021 08:47:52 -0800 (PST) Received: from localhost ([::1]:39398 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l99hU-0008Ng-KX for importer@patchew.org; Mon, 08 Feb 2021 11:47:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:45538) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l94lB-000232-C2 for qemu-devel@nongnu.org; Mon, 08 Feb 2021 06:31:19 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:35385) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l94kr-0002Zg-H3 for qemu-devel@nongnu.org; Mon, 08 Feb 2021 06:31:11 -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-34-HBZ_na2WOOONRqTs49VKxQ-1; Mon, 08 Feb 2021 06:30:51 -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 25A0C801981; Mon, 8 Feb 2021 11:30:50 +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 49802101E243; Mon, 8 Feb 2021 11:30:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612783856; 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=JBf3eWgiLWA6nL1pLM/+sbON6jwD7Wcx8WkvDMmbEqM=; b=KdFNnwcIPcLLB5VjsGoAkYfIY/uwO6UtxEIxIq0I31OBHvtoEZmyEdceIgU15BDXPM/z9p JYRXBgI6HsMnP0MhCP3HOzXnsL/7qs7gcfpXxmNO45kA895yIrZhmt5qdvtS9WVuCFmB5r lJrHeBuqwDw347wS8O3u0d+yfO65OLE= X-MC-Unique: HBZ_na2WOOONRqTs49VKxQ-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 21/27] migration: control whether snapshots are ovewritten Date: Mon, 8 Feb 2021 11:29:12 +0000 Message-Id: <20210208112918.185058-22-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=170.10.133.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, SPF_HELO_NONE=0.001, 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.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 The traditional HMP "savevm" command will overwrite an existing snapshot if it already exists with the requested name. This new flag allows this to be controlled allowing for safer behaviour with a future QMP command. Reviewed-by: Eric Blake Signed-off-by: Daniel P. Berrang=C3=A9 Message-Id: <20210204124834.774401-8-berrange@redhat.com> Signed-off-by: Dr. David Alan Gilbert --- include/migration/snapshot.h | 3 ++- migration/savevm.c | 19 ++++++++++++++++--- monitor/hmp-cmds.c | 2 +- replay/replay-debugging.c | 2 +- replay/replay-snapshot.c | 2 +- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/include/migration/snapshot.h b/include/migration/snapshot.h index d7d210820c..d8c22d343c 100644 --- a/include/migration/snapshot.h +++ b/include/migration/snapshot.h @@ -18,11 +18,12 @@ /** * save_snapshot: Save an internal snapshot. * @name: name of internal snapshot + * @overwrite: replace existing snapshot with @name * @errp: pointer to error object * On success, return %true. * On failure, store an error through @errp and return %false. */ -bool save_snapshot(const char *name, Error **errp); +bool save_snapshot(const char *name, bool overwrite, Error **errp); =20 /** * load_snapshot: Load an internal snapshot. diff --git a/migration/savevm.c b/migration/savevm.c index a2a842d067..0ae8e4798c 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2764,7 +2764,7 @@ int qemu_load_device_state(QEMUFile *f) return 0; } =20 -bool save_snapshot(const char *name, Error **errp) +bool save_snapshot(const char *name, bool overwrite, Error **errp) { BlockDriverState *bs; QEMUSnapshotInfo sn1, *sn =3D &sn1; @@ -2792,8 +2792,21 @@ bool save_snapshot(const char *name, Error **errp) =20 /* Delete old snapshots of the same name */ if (name) { - if (bdrv_all_delete_snapshot(name, false, NULL, errp) < 0) { - return false; + if (overwrite) { + if (bdrv_all_delete_snapshot(name, false, NULL, errp) < 0) { + return false; + } + } else { + ret2 =3D bdrv_all_has_snapshot(name, false, NULL, errp); + if (ret2 < 0) { + return false; + } + if (ret2 =3D=3D 1) { + error_setg(errp, + "Snapshot '%s' already exists in one or more de= vices", + name); + return false; + } } } =20 diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index f795261f77..1fff33f14a 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1149,7 +1149,7 @@ void hmp_savevm(Monitor *mon, const QDict *qdict) { Error *err =3D NULL; =20 - save_snapshot(qdict_get_try_str(qdict, "name"), &err); + save_snapshot(qdict_get_try_str(qdict, "name"), true, &err); hmp_handle_error(mon, err); } =20 diff --git a/replay/replay-debugging.c b/replay/replay-debugging.c index 098ef8e0f5..0ae6785b3b 100644 --- a/replay/replay-debugging.c +++ b/replay/replay-debugging.c @@ -327,7 +327,7 @@ void replay_gdb_attached(void) */ if (replay_mode =3D=3D REPLAY_MODE_PLAY && !replay_snapshot) { - if (!save_snapshot("start_debugging", NULL)) { + if (!save_snapshot("start_debugging", true, NULL)) { /* Can't create the snapshot. Continue conventional debugging.= */ } } diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c index b289365937..31c5a8702b 100644 --- a/replay/replay-snapshot.c +++ b/replay/replay-snapshot.c @@ -77,7 +77,7 @@ void replay_vmstate_init(void) =20 if (replay_snapshot) { if (replay_mode =3D=3D REPLAY_MODE_RECORD) { - if (!save_snapshot(replay_snapshot, &err)) { + if (!save_snapshot(replay_snapshot, true, &err)) { error_report_err(err); error_report("Could not create snapshot for icount record"= ); exit(1); --=20 2.29.2