From nobody Thu May 15 21:41:27 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 150887380127757.08626033936514; Tue, 24 Oct 2017 12:36:41 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BEF0F80F6C; Tue, 24 Oct 2017 19:36:39 +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 92E705C552; Tue, 24 Oct 2017 19:36:39 +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 00B2B6EF3B; Tue, 24 Oct 2017 19:36:16 +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 v9OJZoEC009764 for ; Tue, 24 Oct 2017 15:35:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4BC6B6017B; Tue, 24 Oct 2017 19:35:50 +0000 (UTC) Received: from mx1.redhat.com (ext-mx03.extmail.prod.ext.phx2.redhat.com [10.5.110.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 465AD60176 for ; Tue, 24 Oct 2017 19:35:50 +0000 (UTC) Received: from mail-qt0-f175.google.com (mail-qt0-f175.google.com [209.85.216.175]) (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 662237E42C for ; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: by mail-qt0-f175.google.com with SMTP id 8so31965388qtv.1 for ; Tue, 24 Oct 2017 12:35:47 -0700 (PDT) Received: from dawid-fedora.datto.lan ([47.19.105.250]) by smtp.gmail.com with ESMTPSA id f66sm683127qkc.25.2017.10.24.12.35.45 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:45 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BEF0F80F6C Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx03.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 BEF0F80F6C 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="tCFeyZus" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 662237E42C Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 662237E42C 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=IVyAQfUIPYaVkBsfKOXXtNxw6nGIxVoOIXrwWc22Or8=; b=tCFeyZusZ3APH8VCJusp8GWYtkaxu5/fNByyHyzb3/VA3yNwhi/gD7lkd4dJZag6oy AuvniktsU15L3BJYWiu0czXU4xPb5Nuu/aWRnju2ADEL84oTNr8rbyzNbGA9dsztqTlW Qt0Xgz0A5+3mcpYHBovqOwGxH1O+Mp+X2ghjrMWPRKgesAM37cmmaGhhl71GVGYAge2h EtpXQJ9qM/K4XuUoGx8fspFBrcwnAVFeSqTb9SXxqBWf5pLObU19IdIPyIO6bZX/hg0J vxVtkoxQAv42NjNn/kIn+Vplm6o0ENwAPFFr438g6dpjUSJrdV+eJfUmYMfgmxqsNLYY GR0Q== 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=IVyAQfUIPYaVkBsfKOXXtNxw6nGIxVoOIXrwWc22Or8=; b=oES+RVr6Pp6diXwPwL4cXVGR94uLjzpYBt2sHj0IBV/6RdnspfXEyDQaVZYTcAzRvm EW6XbbKCRvnqHfPeUKdAQ+J428f42DQAxh4MbDqbA/Hbo7bnCXXUkJr3267spdW5DZva Slt2p5lF1ryF3qOxsiq+OH1sVLCvW2CMC3PC8FsG4vi0TL6VTb3PW2ARWq3cDpMKOmo5 ZKCblgiJwS7slHorkPvS1WwwNuNPDCigwcmBDPbhBf+CrgF7oJhR64brn6THZBkAbXVI abXDFvSS9aPAGVmmyziWKNXgtnZ5HEQHSHXo2O15cXCkWK99+qD5//38W5LRo0zs1HBj /aiA== X-Gm-Message-State: AMCzsaXzL3pdaZ9pammkjc/CjDQY3q7qOs4au4ZASZcg4RO/n3OupSyr m5CmYZnJcD03ItTXCOPiw3t5rnTXnfk= X-Google-Smtp-Source: ABhQp+TsEuCOAL1Xp8+ujmBCzsT8GC8eKpxg2TErmjxcQWNncLJ19V6yIi4LhqXYDgTtmxYUVC/VvQ== X-Received: by 10.237.55.200 with SMTP id j66mr18350335qtb.210.1508873746283; Tue, 24 Oct 2017 12:35:46 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:37 -0400 Message-Id: <20171024193538.9078-15-dzamirski@datto.com> In-Reply-To: <20171024193538.9078-1-dzamirski@datto.com> References: <20171024193538.9078-1-dzamirski@datto.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 24 Oct 2017 19:35:47 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 24 Oct 2017 19:35:47 +0000 (UTC) for IP:'209.85.216.175' DOMAIN:'mail-qt0-f175.google.com' HELO:'mail-qt0-f175.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.175 mail-qt0-f175.google.com 209.85.216.175 mail-qt0-f175.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 14/15] vbox: Process empty removable disks in dumpxml 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 24 Oct 2017 19:36:40 +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" Previously any removable storage device without media attached was omitted from domain XML dump. They're still (rightfully) omitted in snapshot XMl dump but need to be accounted properly to for the device names to stay in 'sync' between domain and snapshot XML dumps. --- src/vbox/vbox_common.c | 128 ++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 74 insertions(+), 54 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index ee6421aae..d1d8804c7 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3213,7 +3213,6 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) virDomainDiskDefPtr disk =3D NULL; char *mediumLocUtf8 =3D NULL; size_t sdCount =3D 0, i; - int diskCount =3D 0; int ret =3D -1; =20 def->ndisks =3D 0; @@ -3226,11 +3225,15 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) if (!mediumAttachment) continue; =20 - gVBoxAPI.UIMediumAttachment.GetMedium(mediumAttachment, &medium); - if (medium) { - def->ndisks++; - VBOX_RELEASE(medium); + rc =3D gVBoxAPI.UIMediumAttachment.GetMedium(mediumAttachment, &me= dium); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get IMedium, rc=3D%08x"), rc); + goto cleanup; } + + def->ndisks++; + VBOX_RELEASE(medium); } =20 /* Allocate mem, if fails return error */ @@ -3246,7 +3249,7 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) } =20 /* get the attachment details here */ - for (i =3D 0; i < mediumAttachments.count && diskCount < def->ndisks; = i++) { + for (i =3D 0; i < mediumAttachments.count; i++) { mediumAttachment =3D mediumAttachments.items[i]; controller =3D NULL; controllerName =3D NULL; @@ -3258,7 +3261,7 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) mediumLocUtf8 =3D NULL; devicePort =3D 0; deviceSlot =3D 0; - disk =3D def->disks[diskCount]; + disk =3D def->disks[i]; =20 if (!mediumAttachment) continue; @@ -3270,9 +3273,6 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) goto cleanup; } =20 - if (!medium) - continue; - rc =3D gVBoxAPI.UIMediumAttachment.GetController(mediumAttachment, &controllerName); if (NS_FAILED(rc)) { @@ -3292,22 +3292,6 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr dat= a, IMachine *machine) goto cleanup; } =20 - rc =3D gVBoxAPI.UIMedium.GetLocation(medium, &mediumLocUtf16); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not get medium storage location, rc=3D= %08x"), - rc); - goto cleanup; - } - - VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8); - - if (virDomainDiskSetSource(disk, mediumLocUtf8) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Could not set disk source")); - goto cleanup; - } - rc =3D gVBoxAPI.UIMediumAttachment.GetType(mediumAttachment, &devi= ceType); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -3333,11 +3317,30 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) rc); goto cleanup; } - rc =3D gVBoxAPI.UIMedium.GetReadOnly(medium, &readOnly); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not get read only state, rc=3D%08x"), = rc); - goto cleanup; + + if (medium) { + rc =3D gVBoxAPI.UIMedium.GetLocation(medium, &mediumLocUtf16); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get medium storage location, r= c=3D%08x"), + rc); + goto cleanup; + } + + VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8); + + if (virDomainDiskSetSource(disk, mediumLocUtf8) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not set disk source")); + goto cleanup; + } + + rc =3D gVBoxAPI.UIMedium.GetReadOnly(medium, &readOnly); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get read only state, rc=3D%08x= "), rc); + goto cleanup; + } } =20 disk->dst =3D vboxGenerateMediumName(storageBus, devicePort, devic= eSlot, @@ -3375,8 +3378,6 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) =20 virDomainDiskSetType(disk, VIR_STORAGE_TYPE_FILE); =20 - diskCount++; - VBOX_UTF16_FREE(controllerName); VBOX_UTF8_FREE(mediumLocUtf8); VBOX_UTF16_FREE(mediumLocUtf16); @@ -5814,6 +5815,14 @@ vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPt= r def, =20 /* skip empty removable disk */ if (!disk) { + /* removable disks with empty (ejected) media won't be display= ed + * in XML, but we need to update "sdCount" so that device name= s match + * in domain dumpxml and snapshot dumpxml + */ + if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Sto= rageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) + sdCount++; + VBOX_RELEASE(storageController); continue; } @@ -5982,14 +5991,6 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr sn= apshot, 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", @@ -6009,19 +6010,6 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr sn= apshot, } if (!storageController) continue; - rc =3D gVBoxAPI.UIMedium.GetLocation(disk, &mediumLocUtf16); - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Cannot get disk location")); - goto cleanup; - } - VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8); - VBOX_UTF16_FREE(mediumLocUtf16); - if (VIR_STRDUP(def->dom->disks[diskCount]->src->path, mediumLocUtf= 8) < 0) - goto cleanup; - - VBOX_UTF8_FREE(mediumLocUtf8); - rc =3D gVBoxAPI.UIStorageController.GetBus(storageController, &sto= rageBus); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -6040,6 +6028,38 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr sn= apshot, _("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) { + /* removable disks with empty (ejected) media won't be display= ed + * in XML, but we need to update "sdCount" so that device name= s match + * in domain dumpxml and snapshot dumpxml + */ + if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Sto= rageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) + sdCount++; + continue; + } + + rc =3D gVBoxAPI.UIMedium.GetLocation(disk, &mediumLocUtf16); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get disk location")); + goto cleanup; + } + VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8); + VBOX_UTF16_FREE(mediumLocUtf16); + if (VIR_STRDUP(def->dom->disks[diskCount]->src->path, mediumLocUtf= 8) < 0) + goto cleanup; + + VBOX_UTF8_FREE(mediumLocUtf8); rc =3D gVBoxAPI.UIMedium.GetReadOnly(disk, &readOnly); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list