From nobody Sat Feb 7 07:10:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1606412855; cv=none; d=zohomail.com; s=zohoarc; b=KKGnGDak37wO7t1rLQUPqW5gTRntqFxloHz4onVOaweENn3fvaKjk+wPVaYQvax98RO9Y4mfSq5fjNR1/k+LfnLVfJ3PGKcbm9vVRNPhdWsEcPfalFsX20psh4VL2QfZIMzsijdstddnEGmz8AiTlETtQa7Au2HC8pRGhwL2af0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606412855; h=Content-Type:Content-Transfer-Encoding:Cc: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=dinuzQJ4c3MqATkyGXGao7LWjzD/dHTemgL2hqAJohM=; b=Yhy9YLIrUwlcGJKcOBCxRIQO/qyGrKOufPLhdGcLo4iBC/JqP9UE2cewY6FX/gjMlrTG4peJUdV4xwSI3F6d9fmAgoY+ZFnsMsYOmLgQHDS95ONxxy0SN/V/FNrxpJJP/GCcQ05Am40g8qIQ5fRLphg5g0oqDTEfIBHpkBxiUrM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail 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 1606412855362323.60891956436683; Thu, 26 Nov 2020 09:47:35 -0800 (PST) Received: from localhost ([::1]:55818 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kiLMk-0005eO-BA for importer@patchew.org; Thu, 26 Nov 2020 12:47:34 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kiLBq-0002vv-P0 for qemu-devel@nongnu.org; Thu, 26 Nov 2020 12:36:19 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:55214) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kiLBh-0006aX-0A for qemu-devel@nongnu.org; Thu, 26 Nov 2020 12:36: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-493-Tb8SVwuZPbiiiCRsJwjy9g-1; Thu, 26 Nov 2020 12:36:02 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6F0028145F1; Thu, 26 Nov 2020 17:36:01 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.36.110.2]) by smtp.corp.redhat.com (Postfix) with ESMTP id 35FE11F047; Thu, 26 Nov 2020 17:35:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1606412166; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dinuzQJ4c3MqATkyGXGao7LWjzD/dHTemgL2hqAJohM=; b=B63YdI8wXwwSG5DqTHavWrBIZn/o2TJaUxd1m5zbc0hciLe3YacmLGb7Y6/NxXQev4Z8DL QiXj6B84aHFja2rCeeoLc168wwLtFVJ8Lk62VfYV5rpjLztKKhpqlLtQk9Vq9n7/LUHPHS U36n0A1VSIj7WUKMBtlwHECTx2ofnM4= X-MC-Unique: Tb8SVwuZPbiiiCRsJwjy9g-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH v8 07/11] migration: control whether snapshots are ovewritten Date: Thu, 26 Nov 2020 17:35:17 +0000 Message-Id: <20201126173521.137580-8-berrange@redhat.com> In-Reply-To: <20201126173521.137580-1-berrange@redhat.com> References: <20201126173521.137580-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=berrange@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=216.205.24.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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: , Cc: Kevin Wolf , Peter Krempa , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , "Denis V. Lunev" , qemu-block@nongnu.org, Juan Quintela , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Dr. David Alan Gilbert" , Max Reitz , Pavel Dovgalyuk , Paolo Bonzini , John Snow , Markus Armbruster Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) 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 --- 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 18275aef2c..3ced05459d 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2725,7 +2725,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, old_sn1, *old_sn =3D &old_sn1; @@ -2753,8 +2753,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 a5e2de5947..4e1e775007 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1140,7 +1140,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 0fdf643c7b..8847b2e218 100644 --- a/replay/replay-debugging.c +++ b/replay/replay-debugging.c @@ -328,7 +328,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.28.0