From nobody Thu Dec 18 14:00:42 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1743773464; cv=none; d=zohomail.com; s=zohoarc; b=NCzO3QgeXy+69QjvHoNu+SYxTc4vqSi6YmLvRODF6rw9fLh4n5gwD0Mh932fvXmYmGCk7ilwux/ND9jX0qReaOt4KgkJTE5wLIpwQgze6iTsZuXucAW94g/f6wKiwmr5NVwU27IcOeX/gI44BYEyipRmofSOpsT229mp/1EShjw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1743773464; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=pPP2wsFvq8wuKVu5ukeD0hAGzURKkotbv32rfDARdeM=; b=aXrPbjSZLPERdH1UaZE/7uwl4KBZD2U1EkKEYKpHFg2LffVEkyd7aA/+jozl6RzBTqkq0Ic/rjKfyDlUjewFcz/n0loqj7KwRNm6HY4OJh61QBuxAZijMjkFcbs0vBqF2Kxq2xs3U+/H9uGuygA+tY0eziB7D6Lpg1LSgVKPcDU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1743773464915821.0196295350956; Fri, 4 Apr 2025 06:31:04 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D5C0015ED; Fri, 4 Apr 2025 09:31:03 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2C1B8162A; Fri, 4 Apr 2025 09:28:23 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E3A9B11D5; Fri, 4 Apr 2025 09:28:18 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A9B7811D5 for ; Fri, 4 Apr 2025 09:28:11 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-631-2fNyHiNFM7aYzEoiivWQWw-1; Fri, 04 Apr 2025 09:28:10 -0400 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5C0A019560B7 for ; Fri, 4 Apr 2025 13:28:09 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.3.236]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A5A451955BC7 for ; Fri, 4 Apr 2025 13:28:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1743773291; 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=4gg+q4MgZP3RDM4/FaTmkVK/wez3yqiIueejwgr2J+w=; b=TxsOrnfILBD1/pBCyTExiVFvjRBuO/SE9XTiYrF9qvph+He+E8OxNSCsi6yED/hZzMUjK0 ev/Jo37CQW6Bv1GbWV31IbgkPvQo1VpLguHEidpnIUErVzOI5QTfoJUrElJkJ+J8t8qnjN 2ASS45uU9kGHMEeLJPmCQOIcpUNx/rc= X-MC-Unique: 2fNyHiNFM7aYzEoiivWQWw-1 X-Mimecast-MFC-AGG-ID: 2fNyHiNFM7aYzEoiivWQWw_1743773289 To: devel@lists.libvirt.org Subject: [PATCH 5/8] vbox: Move parts of vboxSnapshotRedefine() into a separate function Date: Fri, 4 Apr 2025 15:27:57 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: TU9zzW3FHgxRGsOi4meoXrtluCHB8l1TntDUXvqyiuw_1743773289 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4SWDLDNIL6366H3WT7MIH2J6LZ7A5CHU X-Message-ID-Hash: 4SWDLDNIL6366H3WT7MIH2J6LZ7A5CHU X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1743773467234019100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik There's too much happening inside of vboxSnapshotRedefine(). Not only it makes the function hard to read, but it also increases stack size of the function. Move one part into a separate function: vboxSnapshotAddDisksToMediaRegistry() Signed-off-by: Michal Privoznik --- src/vbox/vbox_common.c | 215 ++++++++++++++++++++++------------------- 1 file changed, 115 insertions(+), 100 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index b52e0c3e6a..e5490304d8 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -4669,6 +4669,119 @@ vboxSnapshotReplaceRWDisks(struct _vboxDriver *data, } =20 =20 +static int +vboxSnapshotAddDisksToMediaRegistry(struct _vboxDriver *data, + virDomainSnapshotDef *def, + virVBoxSnapshotConfMachine *snapshotMa= chineDesc) +{ + int it =3D 0; + + for (it =3D 0; it < def->parent.dom->ndisks; it++) { + int diskInMediaRegistry =3D 0; + IMedium *readOnlyMedium =3D NULL; + PRUnichar *locationUtf =3D NULL; + char *uuid =3D NULL; + PRUnichar *formatUtf =3D NULL; + char *format =3D NULL; + char *parentUuid =3D NULL; + virVBoxSnapshotConfHardDisk *readOnlyDisk =3D NULL; + vboxIID iid, parentiid; + IMedium *parentReadOnlyMedium =3D NULL; + nsresult rc; + + VBOX_IID_INITIALIZE(&iid); + VBOX_IID_INITIALIZE(&parentiid); + diskInMediaRegistry =3D virVBoxSnapshotConfDiskIsInMediaRegistry(s= napshotMachineDesc, + def= ->parent.dom->disks[it]->src->path); + if (diskInMediaRegistry =3D=3D -1) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to know if disk is in media registry= ")); + return -1; + } + if (diskInMediaRegistry =3D=3D 1) /* Nothing to do. */ + continue; + /* The read only disk is not in the media registry */ + + VBOX_UTF8_TO_UTF16(def->parent.dom->disks[it]->src->path, &locatio= nUtf); + rc =3D gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, + locationUtf, + DeviceType_HardDisk, + AccessMode_ReadWrite, + &readOnlyMedium); + if (NS_FAILED(rc)) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to open HardDisk")); + VBOX_UTF16_FREE(locationUtf); + return -1; + } + VBOX_UTF16_FREE(locationUtf); + + rc =3D gVBoxAPI.UIMedium.GetId(readOnlyMedium, &iid); + if (NS_FAILED(rc)) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to get hard disk id")); + return -1; + } + gVBoxAPI.UIID.vboxIIDToUtf8(data, &iid, &uuid); + vboxIIDUnalloc(&iid); + + rc =3D gVBoxAPI.UIMedium.GetFormat(readOnlyMedium, &formatUtf); + if (NS_FAILED(rc)) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to get hard disk format")); + VIR_FREE(uuid); + return -1; + } + VBOX_UTF16_TO_UTF8(formatUtf, &format); + VBOX_UTF16_FREE(formatUtf); + + /* This disk is already in the media registry */ + rc =3D gVBoxAPI.UIMedium.GetParent(readOnlyMedium, &parentReadOnly= Medium); + if (NS_FAILED(rc)) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to get parent hard disk")); + VIR_FREE(uuid); + return -1; + } + + rc =3D gVBoxAPI.UIMedium.GetId(parentReadOnlyMedium, &parentiid); + if (NS_FAILED(rc)) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to get hard disk id")); + VIR_FREE(uuid); + return -1; + } + gVBoxAPI.UIID.vboxIIDToUtf8(data, &parentiid, &parentUuid); + vboxIIDUnalloc(&parentiid); + + rc =3D gVBoxAPI.UIMedium.Close(readOnlyMedium); + if (NS_FAILED(rc)) { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to close HardDisk")); + VIR_FREE(uuid); + VIR_FREE(parentUuid); + return -1; + } + + readOnlyDisk =3D g_new0(virVBoxSnapshotConfHardDisk, 1); + + readOnlyDisk->format =3D format; + readOnlyDisk->uuid =3D uuid; + readOnlyDisk->location =3D g_strdup(def->parent.dom->disks[it]->sr= c->path); + + if (virVBoxSnapshotConfAddHardDiskToMediaRegistry(readOnlyDisk, sn= apshotMachineDesc->mediaRegistry, + parentUuid) < 0)= { + vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to add hard disk to media registry")= ); + VIR_FREE(readOnlyDisk); + return -1; + } + } + + return 0; +} + + static int vboxSnapshotRedefine(virDomainPtr dom, virDomainSnapshotDef *def, @@ -4799,106 +4912,8 @@ vboxSnapshotRedefine(virDomainPtr dom, * read-only disks are in the redefined snapshot's media registry (the= disks need to * be open to query their uuid). */ - for (it =3D 0; it < def->parent.dom->ndisks; it++) { - int diskInMediaRegistry =3D 0; - IMedium *readOnlyMedium =3D NULL; - PRUnichar *locationUtf =3D NULL; - char *uuid =3D NULL; - PRUnichar *formatUtf =3D NULL; - char *format =3D NULL; - char *parentUuid =3D NULL; - virVBoxSnapshotConfHardDisk *readOnlyDisk =3D NULL; - vboxIID iid, parentiid; - IMedium *parentReadOnlyMedium =3D NULL; - - VBOX_IID_INITIALIZE(&iid); - VBOX_IID_INITIALIZE(&parentiid); - diskInMediaRegistry =3D virVBoxSnapshotConfDiskIsInMediaRegistry(s= napshotMachineDesc, - def->parent.dom->d= isks[it]->src->path); - if (diskInMediaRegistry =3D=3D -1) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to know if disk is in media registry= ")); - goto cleanup; - } - if (diskInMediaRegistry =3D=3D 1) /* Nothing to do. */ - continue; - /* The read only disk is not in the media registry */ - - VBOX_UTF8_TO_UTF16(def->parent.dom->disks[it]->src->path, &locatio= nUtf); - rc =3D gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, - locationUtf, - DeviceType_HardDisk, - AccessMode_ReadWrite, - &readOnlyMedium); - if (NS_FAILED(rc)) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to open HardDisk")); - VBOX_UTF16_FREE(locationUtf); - goto cleanup; - } - VBOX_UTF16_FREE(locationUtf); - - rc =3D gVBoxAPI.UIMedium.GetId(readOnlyMedium, &iid); - if (NS_FAILED(rc)) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to get hard disk id")); - goto cleanup; - } - gVBoxAPI.UIID.vboxIIDToUtf8(data, &iid, &uuid); - vboxIIDUnalloc(&iid); - - rc =3D gVBoxAPI.UIMedium.GetFormat(readOnlyMedium, &formatUtf); - if (NS_FAILED(rc)) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to get hard disk format")); - VIR_FREE(uuid); - goto cleanup; - } - VBOX_UTF16_TO_UTF8(formatUtf, &format); - VBOX_UTF16_FREE(formatUtf); - - /* This disk is already in the media registry */ - rc =3D gVBoxAPI.UIMedium.GetParent(readOnlyMedium, &parentReadOnly= Medium); - if (NS_FAILED(rc)) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to get parent hard disk")); - VIR_FREE(uuid); - goto cleanup; - } - - rc =3D gVBoxAPI.UIMedium.GetId(parentReadOnlyMedium, &parentiid); - if (NS_FAILED(rc)) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to get hard disk id")); - VIR_FREE(uuid); - goto cleanup; - } - gVBoxAPI.UIID.vboxIIDToUtf8(data, &parentiid, &parentUuid); - vboxIIDUnalloc(&parentiid); - - rc =3D gVBoxAPI.UIMedium.Close(readOnlyMedium); - if (NS_FAILED(rc)) { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to close HardDisk")); - VIR_FREE(uuid); - VIR_FREE(parentUuid); - goto cleanup; - } - - readOnlyDisk =3D g_new0(virVBoxSnapshotConfHardDisk, 1); - - readOnlyDisk->format =3D format; - readOnlyDisk->uuid =3D uuid; - readOnlyDisk->location =3D g_strdup(def->parent.dom->disks[it]->sr= c->path); - - if (virVBoxSnapshotConfAddHardDiskToMediaRegistry(readOnlyDisk, sn= apshotMachineDesc->mediaRegistry, - parentUuid) < 0)= { - vboxReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to add hard disk to media registry")= ); - VIR_FREE(readOnlyDisk); - goto cleanup; - } - } + if (vboxSnapshotAddDisksToMediaRegistry(data, def, snapshotMachineDesc= ) < 0) + goto cleanup; =20 /* Now, we can unregister the machine */ rc =3D gVBoxAPI.UIMachine.Unregister(machine, --=20 2.49.0