From nobody Wed Dec 17 04:05:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1510080611035447.3962333197218; Tue, 7 Nov 2017 10:50:11 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 693EA5FD7C; Tue, 7 Nov 2017 18:50:09 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3C9EE6BF6F; Tue, 7 Nov 2017 18:50:09 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 0525B3D387; Tue, 7 Nov 2017 18:50:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vA7InfA4024877 for ; Tue, 7 Nov 2017 13:49:41 -0500 Received: by smtp.corp.redhat.com (Postfix) id 75B9E60171; Tue, 7 Nov 2017 18:49:41 +0000 (UTC) Received: from mx1.redhat.com (ext-mx04.extmail.prod.ext.phx2.redhat.com [10.5.110.28]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6F4D1512F7 for ; Tue, 7 Nov 2017 18:49:38 +0000 (UTC) Received: from mail-qt0-f169.google.com (mail-qt0-f169.google.com [209.85.216.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 84CC28047F for ; Tue, 7 Nov 2017 18:49:37 +0000 (UTC) Received: by mail-qt0-f169.google.com with SMTP id 31so274070qtz.9 for ; Tue, 07 Nov 2017 10:49:37 -0800 (PST) Received: from dawid-fedora.datto.lan ([47.19.105.250]) by smtp.gmail.com with ESMTPSA id t34sm1313175qtb.79.2017.11.07.10.49.35 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Nov 2017 10:49:36 -0800 (PST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 693EA5FD7C Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 693EA5FD7C Authentication-Results: mx1.redhat.com; dkim=fail reason="signature verification failed" (2048-bit key) header.d=datto-com.20150623.gappssmtp.com header.i=@datto-com.20150623.gappssmtp.com header.b="Wn0q8Vgc" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 84CC28047F Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 84CC28047F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datto-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=7E0Exm3H794wooF2SLByVm8d4/fNVvm9UxR5QWkf4Mc=; b=Wn0q8Vgcit00BPHTYsaz8MewBq+yI/cfXwJ+74wAUfUPm+AxKw6AAEoA4z8TIs0qsR +lC/fkcbaMtQPxYhB6AvvjLjQJ8SND1j2jo0z62ro1vsMGEixWUD0syxGHclsYzo4wzO nzBITjKqyrHsZMQsz9mHC9Y8UnZTVUdJkqidwQMSw+YxUOvHXZfl8yJN9UkH/VfXmm3z 5bVGJzt371tBooxZxcANbJtuRsIMHJQ8LsrtT4PTYCxl/C6MQA1UOVD197pO1VlKSwMn iv5VXjDOj4pk7/iKr4Gv20PAEzw7ERe1dAV25n57FvqgSj1iKF8+DiJ3eEal73iyaM9t 9ArQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=7E0Exm3H794wooF2SLByVm8d4/fNVvm9UxR5QWkf4Mc=; b=ZdnA8uwh4xBU10pWkASFQNwxZBeAveJU7lGqSF+27N0IE/H793iU4dID+X94G/Lg+c owDiC/V4ezr04eCycEnQMHf0OhiXlRsK9GNrutcECsTRD4k+fnyBkEmF2JPuId97AQQC V9pU7EjdrW1CYgCwJ9owb/NegwYur3oWIxZwgBZ3bke+kO3ikooIHKWxLUffziY4Hw9o PAXKBa7DX635zJi4XaxBlle/xL+Qt8tklc4YA9U5uKnFKtQ7AEs7SndnS4/zsbd+CO+B DRk6H4ALj3fT7Y+NLaXVxMcxkDjxUIRYvUF6uml5RbFzcIICG6ZmwHdAA3dUJG21UBtJ gLwg== X-Gm-Message-State: AMCzsaW820lQBgefdF+XscsRXAMs5BAGiMJN/GAh4PUj2iA3oZno2Imr U0gel+lsrnL+4QG3svuZig779hiXqCo= X-Google-Smtp-Source: ABhQp+Rafg0+knL0hFxrT0jR0GoSK1oxbMn+pwLoBllBJ8XLFDZ76Pi2c0LaUfGxVI1Zglvjgu/0pQ== X-Received: by 10.200.36.50 with SMTP id c47mr30285543qtc.274.1510080576476; Tue, 07 Nov 2017 10:49:36 -0800 (PST) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 7 Nov 2017 13:49:22 -0500 Message-Id: <20171107184930.12769-6-dzamirski@datto.com> In-Reply-To: <20171107184930.12769-1-dzamirski@datto.com> References: <20171107184930.12769-1-dzamirski@datto.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 07 Nov 2017 18:49:37 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 07 Nov 2017 18:49:37 +0000 (UTC) for IP:'209.85.216.169' DOMAIN:'mail-qt0-f169.google.com' HELO:'mail-qt0-f169.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: 0.469 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.216.169 mail-qt0-f169.google.com 209.85.216.169 mail-qt0-f169.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.28 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v3 05/13] vbox: Cleanup/prepare snasphot dumpxml functions X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 07 Nov 2017 18:50:09 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This patch prepares the vboxSnapshotGetReadOnlyDisks and vboxSnapshotGetReadWriteDisks functions for further changes so that the code movement does not obstruct the gist of those future changes. This is done primarily because we'll need to know the type of vbox storage controller as early as possible and make decisions based on that info. --- src/vbox/vbox_common.c | 185 ++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 105 insertions(+), 80 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 2e0d7ee9a..d26ce1bce 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -5653,8 +5653,9 @@ vboxDomainSnapshotGet(vboxDriverPtr data, return snapshot; } =20 -static int vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPtr def, - virDomainSnapshotPtr snapshot) +static int +vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPtr def, + virDomainSnapshotPtr snapshot) { virDomainPtr dom =3D snapshot->domain; vboxDriverPtr data =3D dom->conn->privateData; @@ -5755,26 +5756,72 @@ static int vboxSnapshotGetReadWriteDisks(virDomainS= napshotDefPtr def, void *handle; size_t j =3D 0; size_t k =3D 0; + if (!imediumattach) continue; - rc =3D gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &disk); + + rc =3D gVBoxAPI.UIMediumAttachment.GetController(imediumattach, + &storageControllerN= ame); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium")); + _("Cannot get storage controller name")); goto cleanup; } - if (!disk) - continue; - rc =3D gVBoxAPI.UIMediumAttachment.GetController(imediumattach, &s= torageControllerName); + + rc =3D gVBoxAPI.UIMachine.GetStorageControllerByName(machine, + storageControll= erName, + &storageControl= ler); + VBOX_UTF16_FREE(storageControllerName); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get controller")); + _("Cannot get storage controller by name")); goto cleanup; } - if (!storageControllerName) { - VBOX_RELEASE(disk); + + rc =3D gVBoxAPI.UIStorageController.GetBus(storageController, &sto= rageBus); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get storage controller bus")); + VBOX_RELEASE(storageController); + goto cleanup; + } + + rc =3D gVBoxAPI.UIMediumAttachment.GetType(imediumattach, &deviceT= ype); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get medium attachment type")); + VBOX_RELEASE(storageController); + goto cleanup; + } + rc =3D gVBoxAPI.UIMediumAttachment.GetPort(imediumattach, &deviceP= ort); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get medium attachment port")); + VBOX_RELEASE(storageController); + goto cleanup; + } + rc =3D gVBoxAPI.UIMediumAttachment.GetDevice(imediumattach, &devic= eSlot); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get medium attachment slot")); + VBOX_RELEASE(storageController); + goto cleanup; + } + + rc =3D gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &disk); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get medium")); + VBOX_RELEASE(storageController); + goto cleanup; + } + + /* skip empty removable disk */ + if (!disk) { + VBOX_RELEASE(storageController); continue; } + handle =3D gVBoxAPI.UArray.handleMediumGetChildren(disk); rc =3D gVBoxAPI.UArray.vboxArrayGet(&children, disk, handle); if (NS_FAILED(rc)) { @@ -5797,53 +5844,25 @@ static int vboxSnapshotGetReadWriteDisks(virDomainS= napshotDefPtr def, char *diskSnapIdStr =3D NULL; VBOX_UTF16_TO_UTF8(diskSnapId, &diskSnapIdStr); if (STREQ(diskSnapIdStr, snapshotUuidStr)) { - rc =3D gVBoxAPI.UIMachine.GetStorageControllerByName(m= achine, - sto= rageControllerName, - &st= orageController); - VBOX_UTF16_FREE(storageControllerName); - if (!storageController) { - VBOX_RELEASE(child); - break; - } rc =3D gVBoxAPI.UIMedium.GetLocation(child, &childLocU= tf16); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("cannot get disk location")); + VBOX_RELEASE(storageController); + VBOX_RELEASE(disk); + VBOX_RELEASE(child); goto cleanup; } VBOX_UTF16_TO_UTF8(childLocUtf16, &childLocUtf8); VBOX_UTF16_FREE(childLocUtf16); if (VIR_STRDUP(def->disks[diskCount].src->path, childL= ocUtf8) < 0) { - VBOX_RELEASE(child); VBOX_RELEASE(storageController); + VBOX_RELEASE(disk); + VBOX_RELEASE(child); goto cleanup; } VBOX_UTF8_FREE(childLocUtf8); =20 - rc =3D gVBoxAPI.UIStorageController.GetBus(storageCont= roller, &storageBus); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get storage controller bu= s")); - goto cleanup; - } - rc =3D gVBoxAPI.UIMediumAttachment.GetType(imediumatta= ch, &deviceType); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium attachment typ= e")); - goto cleanup; - } - rc =3D gVBoxAPI.UIMediumAttachment.GetPort(imediumatta= ch, &devicePort); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium attachment typ= e")); - goto cleanup; - } - rc =3D gVBoxAPI.UIMediumAttachment.GetDevice(imediumat= tach, &deviceSlot); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium attachment dev= ice")); - goto cleanup; - } def->disks[diskCount].src->type =3D VIR_STORAGE_TYPE_F= ILE; def->disks[diskCount].name =3D vboxGenerateMediumName(= storageBus, de= viceInst, @@ -5862,6 +5881,7 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSna= pshotDefPtr def, gVBoxAPI.UArray.vboxArrayRelease(&mediumAttachments); =20 ret =3D 0; + cleanup: if (ret < 0) { for (i =3D 0; i < def->ndisks; i++) @@ -5873,9 +5893,9 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSna= pshotDefPtr def, return ret; } =20 -static -int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr snapshot, - virDomainSnapshotDefPtr def) +static int +vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr snapshot, + virDomainSnapshotDefPtr def) { virDomainPtr dom =3D snapshot->domain; vboxDriverPtr data =3D dom->conn->privateData; @@ -5970,18 +5990,10 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotP= tr snapshot, IMediumAttachment *imediumattach =3D mediumAttachments.items[i]; if (!imediumattach) continue; - rc =3D gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &disk); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium")); - goto cleanup; - } - if (!disk) - continue; rc =3D gVBoxAPI.UIMediumAttachment.GetController(imediumattach, &s= torageControllerName); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get storage controller name")); + _("Cannot get storage controller name")); goto cleanup; } if (!storageControllerName) @@ -5989,18 +6001,50 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotP= tr snapshot, rc =3D gVBoxAPI.UIMachine.GetStorageControllerByName(machine, storageControll= erName, &storageControl= ler); + VBOX_UTF16_FREE(storageControllerName); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get storage controller")); + _("Cannot get storage controller")); goto cleanup; } - VBOX_UTF16_FREE(storageControllerName); if (!storageController) continue; + rc =3D gVBoxAPI.UIStorageController.GetBus(storageController, &sto= rageBus); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get storage controller bus")); + goto cleanup; + } + rc =3D gVBoxAPI.UIMediumAttachment.GetPort(imediumattach, &deviceP= ort); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get medium attachment port")); + goto cleanup; + } + rc =3D gVBoxAPI.UIMediumAttachment.GetDevice(imediumattach, &devic= eSlot); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get device slot")); + goto cleanup; + } + + rc =3D gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &disk); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get medium")); + goto cleanup; + } + + /* skip empty removable disk */ + if (!disk) { + VBOX_RELEASE(storageController); + continue; + } + rc =3D gVBoxAPI.UIMedium.GetLocation(disk, &mediumLocUtf16); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get disk location")); + _("Cannot get disk location")); goto cleanup; } VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8); @@ -6009,11 +6053,10 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotP= tr snapshot, goto cleanup; =20 VBOX_UTF8_FREE(mediumLocUtf8); - - rc =3D gVBoxAPI.UIStorageController.GetBus(storageController, &sto= rageBus); + rc =3D gVBoxAPI.UIMedium.GetReadOnly(disk, &readOnly); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get storage controller bus")); + _("Cannot get read only attribute")); goto cleanup; } if (storageBus =3D=3D StorageBus_IDE) { @@ -6039,24 +6082,6 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPt= r snapshot, else if (deviceType =3D=3D DeviceType_DVD) def->dom->disks[diskCount]->device =3D VIR_DOMAIN_DISK_DEVICE_= CDROM; =20 - rc =3D gVBoxAPI.UIMediumAttachment.GetPort(imediumattach, &deviceP= ort); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium attachment port")); - goto cleanup; - } - rc =3D gVBoxAPI.UIMediumAttachment.GetDevice(imediumattach, &devic= eSlot); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get device")); - goto cleanup; - } - rc =3D gVBoxAPI.UIMedium.GetReadOnly(disk, &readOnly); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get read only attribute")); - goto cleanup; - } if (readOnly =3D=3D PR_TRUE) def->dom->disks[diskCount]->src->readonly =3D true; def->dom->disks[diskCount]->src->type =3D VIR_STORAGE_TYPE_FILE; @@ -6076,9 +6101,9 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr= snapshot, } diskCount ++; } - /* cleanup on error */ =20 ret =3D 0; + cleanup: if (ret < 0) { for (i =3D 0; i < def->dom->ndisks; i++) --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list