From nobody Tue Oct 22 22:31:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1692005834; cv=none; d=zohomail.com; s=zohoarc; b=lOSvbvCeu8hsFG9Kb+KoyFVe8GdZIMQVdMmluhubJ8B87ckDhretWxvdLXaNCb0tozhKfKE9QuQRHbYZLRhlilCSBGiPPxRrR/rLNg5pCIvsk96GbiOQ+zhsh5LPp1AQa3XhJEe2DEY81lH+nVSFzE9iPrwJe1El4tRFMJBEqPo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1692005834; 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=8HJx1X9RjvQHpOsM7LMWRq6WeYM0UXVYHa0R8NlJMNY=; b=RPT0YN2kHB4zHW3erGlpZr3jcrxLzbwWdVVCbtG4v62k7ylVQGlu/Rgw6LsiFFWbiKicqocI695ilmidfDgG7ktScaQCo8M+8ky5LPY7agQXYxUbK0mTWFRvM4bXX32y9l6/p398giBaapZgJ0OU7veX7AbfKW+ZziXC5ARYEso= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1692005834842327.9682248132773; Mon, 14 Aug 2023 02:37:14 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-638-i7iVmRY7NwWmqrXWX5ySnw-1; Mon, 14 Aug 2023 05:37:08 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B6E96830D35; Mon, 14 Aug 2023 09:37:05 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 97467403174; Mon, 14 Aug 2023 09:37:05 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id AA7A119451DA; Mon, 14 Aug 2023 09:36:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 98D7C19465A8 for ; Mon, 14 Aug 2023 09:36:37 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 105F540B4CCC; Mon, 14 Aug 2023 09:36:29 +0000 (UTC) Received: from antique-work.redhat.com (unknown [10.45.226.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id A865C40C207D for ; Mon, 14 Aug 2023 09:36:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1692005833; h=from:from:sender:sender: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:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=8HJx1X9RjvQHpOsM7LMWRq6WeYM0UXVYHa0R8NlJMNY=; b=QM+epQ00fUIYzUAEzVcxfhRNkVS0hnI3eI07XBeIUPMSm/o/QN1LjHLaKlgM6BuTeqeOVF h3bU+RthnWSJrTzub2HX4jvLlIp+Bg7Nuz76pSri1547aaIPeq8CH+uurboJBV7JXZENbe ImA+JLZV3CheEK0/3Nd1WcRddZza9R8= X-MC-Unique: i7iVmRY7NwWmqrXWX5ySnw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Pavel Hrdina To: libvir-list@redhat.com Subject: [libvirt PATCH v3 17/25] qemu_snapshot: add support to delete external snapshot without block commit Date: Mon, 14 Aug 2023 11:36:09 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1692005836622100007 Content-Type: text/plain; charset="utf-8"; x-default="true" When block commit is not needed we can just simply unlink the disk files. Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa --- src/qemu/qemu_snapshot.c | 56 ++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 8b005cae8f..a67be1ae49 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2563,6 +2563,7 @@ typedef struct _qemuSnapshotDeleteExternalData { virStorageSource *prevDiskSrc; /* source of disk for which @diskSrc is backing disk */ qemuBlockJobData *job; + bool merge; } qemuSnapshotDeleteExternalData; =20 =20 @@ -2664,6 +2665,7 @@ qemuSnapshotDeleteExternalPrepareData(virDomainObj *v= m, =20 data =3D g_new0(qemuSnapshotDeleteExternalData, 1); data->snapDisk =3D snapDisk; + data->merge =3D merge; =20 data->parentDomDisk =3D virDomainDiskByTarget(snapdef->parent.dom, data->snapDisk->name); @@ -2674,7 +2676,7 @@ qemuSnapshotDeleteExternalPrepareData(virDomainObj *v= m, return -1; } =20 - if (merge) { + if (data->merge) { data->domDisk =3D qemuDomainDiskByName(vm->def, snapDisk->name= ); if (!data->domDisk) return -1; @@ -3114,31 +3116,42 @@ qemuSnapshotDiscardExternal(virDomainObj *vm, virTristateBool autofinalize =3D VIR_TRISTATE_BOOL_NO; unsigned int commitFlags =3D VIR_DOMAIN_BLOCK_COMMIT_DELETE; =20 - if (data->domDisk->src =3D=3D data->diskSrc) { - commitFlags |=3D VIR_DOMAIN_BLOCK_COMMIT_ACTIVE; - autofinalize =3D VIR_TRISTATE_BOOL_YES; + if (data->merge) { + if (data->domDisk->src =3D=3D data->diskSrc) { + commitFlags |=3D VIR_DOMAIN_BLOCK_COMMIT_ACTIVE; + autofinalize =3D VIR_TRISTATE_BOOL_YES; + } + + if (qemuSnapshotSetInvalid(vm, data->parentSnap, data->snapDis= k, true) < 0) + goto error; + + data->job =3D qemuBlockCommit(vm, + data->domDisk, + data->parentDiskSrc, + data->diskSrc, + data->prevDiskSrc, + 0, + VIR_ASYNC_JOB_SNAPSHOT, + autofinalize, + commitFlags); + + if (!data->job) + goto error; + } else { + if (virStorageSourceInit(data->parentDomDisk->src) < 0 || + virStorageSourceUnlink(data->parentDomDisk->src) < 0) { + VIR_WARN("Failed to remove snapshot image '%s'", + data->snapDisk->name); + } } - - if (qemuSnapshotSetInvalid(vm, data->parentSnap, data->snapDisk, t= rue) < 0) - goto error; - - data->job =3D qemuBlockCommit(vm, - data->domDisk, - data->parentDiskSrc, - data->diskSrc, - data->prevDiskSrc, - 0, - VIR_ASYNC_JOB_SNAPSHOT, - autofinalize, - commitFlags); - - if (!data->job) - goto error; } =20 for (cur =3D externalData; cur; cur =3D g_slist_next(cur)) { qemuSnapshotDeleteExternalData *data =3D cur->data; =20 + if (!data->merge) + continue; + if (qemuSnapshotDeleteBlockJobRunning(vm, data->job) < 0) goto error; =20 @@ -3153,6 +3166,9 @@ qemuSnapshotDiscardExternal(virDomainObj *vm, for (cur =3D externalData; cur; cur =3D g_slist_next(cur)) { qemuSnapshotDeleteExternalData *data =3D cur->data; =20 + if (!data->merge) + continue; + if (data->job->state =3D=3D QEMU_BLOCKJOB_STATE_READY) { if (qemuBlockPivot(vm, data->job, VIR_ASYNC_JOB_SNAPSHOT, NULL= ) < 0) goto error; --=20 2.41.0