From nobody Sun May 5 10:06:21 2024 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 1508873766730549.5192968780243; Tue, 24 Oct 2017 12:36:06 -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 EB2F87E421; Tue, 24 Oct 2017 19:36:04 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CB53418006; Tue, 24 Oct 2017 19:36:04 +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 913D8180610F; Tue, 24 Oct 2017 19:36:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZiTS009684 for ; Tue, 24 Oct 2017 15:35:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5B00B60A9D; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: from mx1.redhat.com (ext-mx05.extmail.prod.ext.phx2.redhat.com [10.5.110.29]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5456E6BF69 for ; Tue, 24 Oct 2017 19:35:41 +0000 (UTC) Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) (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 AF5DA2D1EC7 for ; Tue, 24 Oct 2017 19:35:40 +0000 (UTC) Received: by mail-qk0-f196.google.com with SMTP id m189so27718984qke.4 for ; Tue, 24 Oct 2017 12:35:40 -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.39 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:39 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com EB2F87E421 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 EB2F87E421 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="fbnJ+2Kq" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com AF5DA2D1EC7 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com AF5DA2D1EC7 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=oOuqmOq7OFdv9bd4ODZ5pMv2bLwftrvxe9d1zkHozKY=; b=fbnJ+2KqPMiaqGy6djubgO0ZEuCNJSURljtc7suTofrJoH7KlJU9UZx1flPcAoK2lP R47Y4dmlfFQxMdahsvBf/+3OTYcK5AkJt8cs2CG90JvUeSYJrfhZGwfPqCSWAi3CfORt okyHaRf1AG5o3MzXhcPMBgGsg9kvlBDHNIsUnZJARn37vjZBvFKvm0igLizinmpU/X7R N1Sn3Xd0DlcFuw+IuQc/6BOT5jNsL8lY/+l0gFnwRZZifhtMNZNEgqdWr9P20/AVgmwQ bxuUacfbTRsE+SQx0T5n39+K52XKnq2pNOipaeGoFVhPeyuAwqqeEi5aKOQa9I979XkK +0dQ== 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=oOuqmOq7OFdv9bd4ODZ5pMv2bLwftrvxe9d1zkHozKY=; b=kYtUlyfv+Fe4djUJVweUv/qNoOqKlwfaMOHcjvetl9SYLWQ6WqJZz3gHe8G9qZn6/m gN9z/jemYZtAvHte9lRAh5+rPAeAiJIrGonzEvFjzR5vhJnFJRf9QyK/UiZVlDSoCb+D Y5c+d+iZaD2BI58AzwqxcoLUXHoSqNZCygOjzpgaktXOOwdoymqbgg8GRawCsVY5YJPN 624iMjha4xLDGfLaUrcnqOJQCVKppoC81zi4gEZSS2EfAI9/WNHMaDBYISaSY7WY32sp 1/pK7y+SMgaDUZEhkV6+5Ry0yGi+yuxLbR2Uf1Ni61fQ/+HIxqz28dI5eOTzUBrHG/R6 P7Kg== X-Gm-Message-State: AMCzsaXuqQJwRgL8XKDkQJ5BYsRlW4UNGoSArsyKkQGMHj8QnF/Y4LsW kRFJylCd0eahu7V/7fKyHf0cwiC2iws= X-Google-Smtp-Source: ABhQp+SIpdYf/mD+85OMVLKVy/5o84mPmmTm3BtSZRVUxTZZBKWfROtnNdfqpRmgQhIDbVYE+r/4eA== X-Received: by 10.55.52.148 with SMTP id b142mr17108388qka.116.1508873739738; Tue, 24 Oct 2017 12:35:39 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:24 -0400 Message-Id: <20171024193538.9078-2-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.29]); Tue, 24 Oct 2017 19:35:40 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 24 Oct 2017 19:35:40 +0000 (UTC) for IP:'209.85.220.196' DOMAIN:'mail-qk0-f196.google.com' HELO:'mail-qk0-f196.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.220.196 mail-qk0-f196.google.com 209.85.220.196 mail-qk0-f196.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.29 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 01/15] vbox: Update ATTRIBUTE_UNUSED usage 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:05 +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" Since the removal of VBOX <=3D 3x, the function arguments are actually used so they should not be marked with ATTRIBUTE_UNUSED anymore. Reviewed-by: John Ferlan --- src/vbox/vbox_tmpl.c | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index dffeabde0..4aa5e9a63 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -665,7 +665,9 @@ _virtualboxCreateHardDisk(IVirtualBox *vboxObj, PRUnich= ar *format, #if VBOX_API_VERSION < 5000000 return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, medium= ); #elif VBOX_API_VERSION >=3D 5000000 /*VBOX_API_VERSION >=3D 5000000*/ - return vboxObj->vtbl->CreateMedium(vboxObj, format, location, AccessMo= de_ReadWrite, DeviceType_HardDisk, medium); + return vboxObj->vtbl->CreateMedium(vboxObj, format, location, + AccessMode_ReadWrite, + DeviceType_HardDisk, medium); #endif /*VBOX_API_VERSION >=3D 5000000*/ } =20 @@ -676,38 +678,33 @@ _virtualboxRegisterMachine(IVirtualBox *vboxObj, IMac= hine *machine) } =20 static nsresult -_virtualboxFindHardDisk(IVirtualBox *vboxObj, PRUnichar *location, - PRUint32 deviceType ATTRIBUTE_UNUSED, +_virtualboxFindHardDisk(IVirtualBox *vboxObj, + PRUnichar *location, + PRUint32 deviceType, PRUint32 accessMode ATTRIBUTE_UNUSED, IMedium **medium) { #if VBOX_API_VERSION < 4002000 - return vboxObj->vtbl->FindMedium(vboxObj, location, - deviceType, medium); + return vboxObj->vtbl->FindMedium(vboxObj, location, deviceType, medium= ); #else /* VBOX_API_VERSION >=3D 4002000 */ - return vboxObj->vtbl->OpenMedium(vboxObj, location, - deviceType, accessMode, PR_FALSE, med= ium); + return vboxObj->vtbl->OpenMedium(vboxObj, location, deviceType, access= Mode, + PR_FALSE, medium); #endif /* VBOX_API_VERSION >=3D 4002000 */ } =20 static nsresult -_virtualboxOpenMedium(IVirtualBox *vboxObj ATTRIBUTE_UNUSED, - PRUnichar *location ATTRIBUTE_UNUSED, - PRUint32 deviceType ATTRIBUTE_UNUSED, - PRUint32 accessMode ATTRIBUTE_UNUSED, - IMedium **medium ATTRIBUTE_UNUSED) +_virtualboxOpenMedium(IVirtualBox *vboxObj, + PRUnichar *location, + PRUint32 deviceType, + PRUint32 accessMode, + IMedium **medium) { #if VBOX_API_VERSION =3D=3D 4000000 - return vboxObj->vtbl->OpenMedium(vboxObj, - location, - deviceType, accessMode, + return vboxObj->vtbl->OpenMedium(vboxObj, location, deviceType, access= Mode, medium); #elif VBOX_API_VERSION >=3D 4001000 - return vboxObj->vtbl->OpenMedium(vboxObj, - location, - deviceType, accessMode, - false, - medium); + return vboxObj->vtbl->OpenMedium(vboxObj, location, deviceType, access= Mode, + false, medium); #endif } =20 @@ -759,12 +756,12 @@ _machineGetStorageControllerByName(IMachine *machine,= PRUnichar *name, } =20 static nsresult -_machineAttachDevice(IMachine *machine ATTRIBUTE_UNUSED, - PRUnichar *name ATTRIBUTE_UNUSED, - PRInt32 controllerPort ATTRIBUTE_UNUSED, - PRInt32 device ATTRIBUTE_UNUSED, - PRUint32 type ATTRIBUTE_UNUSED, - IMedium * medium ATTRIBUTE_UNUSED) +_machineAttachDevice(IMachine *machine, + PRUnichar *name, + PRInt32 controllerPort, + PRInt32 device, + PRUint32 type, + IMedium * medium) { return machine->vtbl->AttachDevice(machine, name, controllerPort, device, type, medium); --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873750954645.7446715338068; Tue, 24 Oct 2017 12:35:50 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 21970C062EDF; Tue, 24 Oct 2017 19:35:49 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8830960F84; Tue, 24 Oct 2017 19:35:48 +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 EDFE51804487; Tue, 24 Oct 2017 19:35:45 +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 v9OJZiYO009672 for ; Tue, 24 Oct 2017 15:35:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2A68B18994; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: from mx1.redhat.com (ext-mx09.extmail.prod.ext.phx2.redhat.com [10.5.110.38]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2459F6031E for ; Tue, 24 Oct 2017 19:35:43 +0000 (UTC) Received: from mail-qt0-f172.google.com (mail-qt0-f172.google.com [209.85.216.172]) (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 2B65A49035 for ; Tue, 24 Oct 2017 19:35:41 +0000 (UTC) Received: by mail-qt0-f172.google.com with SMTP id 8so31965035qtv.1 for ; Tue, 24 Oct 2017 12:35:41 -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.39 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:39 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 21970C062EDF Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx07.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 21970C062EDF 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="TlIPoo72" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2B65A49035 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2B65A49035 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=gEbYJv/TJGwKYoaq6NSsJLiVwkdaCEdVUKsM36jqFNY=; b=TlIPoo72GvSAokd7WzTWYsAJVBmAN6m8BUmsXHF7vxQ1o1vJhMYqM/XNA2rTepb54I lSJu9+h7yv/kOLYSAz7cqggjC1XBJPKz+XUAsGh09CfnOn0ykGPf2c/loIMYbYgMEv/n 74l6Y48Ujnif0S9VhEJ6xHUDVSaQ3o+jWXPRaQ/jhleLhLZIgFPenYymwPq6BXI/3nCg oOrwMiGDa56sLX+ScUtufC2GUlKzRZ7kRnghGKoY0s2qAl0d7UGOvH//Hrw9y/PBImUY fd6IX6kqx6Xi2D66jd69QId4HcicpWKsca/l6Eq1bKy2ifGxGmnAgnTaKwB4TLWLUrOV NcuA== 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=gEbYJv/TJGwKYoaq6NSsJLiVwkdaCEdVUKsM36jqFNY=; b=BCPbFFJjJfVPfJqlE6Ccu6cdZ1j/2EkFHqo26WHUngHu8coDkirPTCaQgwyz8k8MVl gC2rFhv+7l6PoTOLSvFsZ6ckcE7q0BhojEN0jn6cObvEz7Y1eI8SXgrkJR1nUvaHneuK yHHxzaReu8xLQaY2vyVnGDhbRmAk79Ys83nR8Tswb9meUNcfuivrfB0ynz0qjsfbAXni PYLqyXGphyGYW7MNG6cjgVBtciLBSmOliknHjUImyaROw0IDKJc4Or535D/JBZ6UOanq /qLa4i/tIeOkZ9v7SxIbmycqQAvoeuXQAK6/o4CZOVgtxyI/zozHOYALIutA13t5T5S7 PZ6w== X-Gm-Message-State: AMCzsaVwLMAv3R0M97nl7hVMfeGn9KGfFbyffNjt7WCtnJ9YNUxbp4Bf kNYgOBcSNmzJKPgJS6xXEWAREhg4GQ8= X-Google-Smtp-Source: ABhQp+SpbSUgEgeg5+J1V99QEISl3l36eHHmYGjMwOd0AeJgLe7SnVCFbT9B4sPqKomXjTV35lNYxQ== X-Received: by 10.200.50.230 with SMTP id a35mr26424781qtb.226.1508873740175; Tue, 24 Oct 2017 12:35:40 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:25 -0400 Message-Id: <20171024193538.9078-3-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.38]); Tue, 24 Oct 2017 19:35:41 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 24 Oct 2017 19:35:41 +0000 (UTC) for IP:'209.85.216.172' DOMAIN:'mail-qt0-f172.google.com' HELO:'mail-qt0-f172.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.172 mail-qt0-f172.google.com 209.85.216.172 mail-qt0-f172.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.38 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 02/15] vbox: Close media when undefining domains 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 Oct 2017 19:35:49 +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" When registering a VM we call OpenMedium on each disk image which adds it to vbox's global media registry. Therefore, we should make sure to call Close when unregistering VM so we cleanup the media registry entries after ourselves - this does not remove disk image files. This follows the behaviour of the VBoxManage unregistervm command. Reviewed-by: John Ferlan --- src/vbox/vbox_tmpl.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 4aa5e9a63..2679b60f7 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -378,6 +378,8 @@ _unregisterMachine(vboxDriverPtr data, vboxIID *iid, IM= achine **machine) { nsresult rc; vboxArray media =3D VBOX_ARRAY_INITIALIZER; + size_t i; + rc =3D data->vboxObj->vtbl->FindMachine(data->vboxObj, iid->value, mac= hine); if (NS_FAILED(rc)) { virReportError(VIR_ERR_NO_DOMAIN, "%s", @@ -385,12 +387,24 @@ _unregisterMachine(vboxDriverPtr data, vboxIID *iid, = IMachine **machine) return rc; } =20 - /* We're not interested in the array returned by the Unregister method, - * but in the side effect of unregistering the virtual machine. In ord= er - * to call the Unregister method correctly we need to use the vboxArray - * wrapper here. */ rc =3D vboxArrayGetWithUintArg(&media, *machine, (*machine)->vtbl->Unr= egister, - CleanupMode_DetachAllReturnNone); + CleanupMode_DetachAllReturnHardDisksOnly); + + if (NS_FAILED(rc)) + goto cleanup; + + /* close each medium attached to VM to remove from media registry */ + for (i =3D 0; i < media.count; i++) { + IMedium *medium =3D media.items[i]; + + if (!medium) + continue; + + /* it's ok to ignore failure here - e.g. it may be used by another= VM */ + ignore_value(medium->vtbl->Close(medium)); + } + + cleanup: vboxArrayUnalloc(&media); return rc; } --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873751384348.23528045631167; Tue, 24 Oct 2017 12:35:51 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D77E27F7B0; Tue, 24 Oct 2017 19:35:48 +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 6D40C5DA60; Tue, 24 Oct 2017 19:35:48 +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 30FC96EF21; Tue, 24 Oct 2017 19:35:46 +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 v9OJZiO0009673 for ; Tue, 24 Oct 2017 15:35:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3147060176; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: from mx1.redhat.com (ext-mx10.extmail.prod.ext.phx2.redhat.com [10.5.110.39]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 243776017B for ; Tue, 24 Oct 2017 19:35:42 +0000 (UTC) Received: from mail-qk0-f181.google.com (mail-qk0-f181.google.com [209.85.220.181]) (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 A6A085AFC7 for ; Tue, 24 Oct 2017 19:35:41 +0000 (UTC) Received: by mail-qk0-f181.google.com with SMTP id 17so27695097qkq.8 for ; Tue, 24 Oct 2017 12:35:41 -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.40 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:40 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D77E27F7B0 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx04.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 D77E27F7B0 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="OI1xrg6r" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A6A085AFC7 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com A6A085AFC7 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=7qwPvHpstl/rFs3LhxT1LVN9yCHFLZvwVAHJU6tlg4o=; b=OI1xrg6rwRbWxRts0zgV4C7tvf1DqG/pCAyPa4KxnjsOFKld50hdQnL/jwm3lMn/dR 626ajFxcdbjvoK84blHxIhLjGPDDyBsZxVJ+/M6xtwYdWWrUkOOP/yNNp8jNwe7bafl6 3O0/ocTsBkEDXZX2xhCMdEWlQwAArdr9vyFVDaP4EBTYuSBcyXQKB4M0H+kxoOCu4S3m AqxJ2JVqvlSNdOembO+kId9LxskA5AfqmS72UmVf8sqb/nAGsZzPAjepv4Dni/yPBrkc G/GnYnHU9hsWJcKs3p33+wlpE+ckXxYSHJ9nBG4D+o/qJIAd0qvhQQJmxeCuMVlOGtue 5Jqg== 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=7qwPvHpstl/rFs3LhxT1LVN9yCHFLZvwVAHJU6tlg4o=; b=ZE80EKZ8N+6pJT1VOvnp8q9vlDLruyiTqX1PnfExiPP3N8X0CerAxj3LIcoPKSOJ+9 vC9gD5hz+gE/PEnes6l34btwfzz9VX0o/SgmTgAOdcKcVhhHS8UJOInybXrDYrFAch1q g3h+B/e/oBDLGMY0NkrwevwgZMoRGNE8rvgMgkn7URuPi+5TYTtXsAYpMYP9NqJsoeTl RqQiRAGas1+6zfrM27+9Pfht5JOrDz+ys1mjTtZB7ns8TUAjIVvYZ9g6vPmKdoWNgzs7 IQUmgXpfH6OzM3kmsmwmUssYMACTJ1sOhP9MzxiKcC+tnESaABpPbGgGakJgppaMciqc qn1A== X-Gm-Message-State: AMCzsaUT7HiB0YoCfkdyiUaYMzxQUsWKE1D6cGUbo61b7EmcSuJFcjoN bflzlnJGTHw00sk8dttMznf0V5iOyeY= X-Google-Smtp-Source: ABhQp+Th2nwje2TSjEnd1mbZ3UguxSyHbqQVcjuMPMrDuwsoRr53VJUahUrewksdVWp91nNHeoo9Vg== X-Received: by 10.55.31.141 with SMTP id n13mr22499992qkh.179.1508873740682; Tue, 24 Oct 2017 12:35:40 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:26 -0400 Message-Id: <20171024193538.9078-4-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.39]); Tue, 24 Oct 2017 19:35:41 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 24 Oct 2017 19:35:41 +0000 (UTC) for IP:'209.85.220.181' DOMAIN:'mail-qk0-f181.google.com' HELO:'mail-qk0-f181.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.220.181 mail-qk0-f181.google.com 209.85.220.181 mail-qk0-f181.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.39 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 03/15] vbox: Cleanup partially-defined VM on failure 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 24 Oct 2017 19:35:49 +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" Since the VBOX API requires to register an initial VM before proceeding to attach any remaining devices to it, any failure to attach such devices should result in automatic cleanup of the initially registered VM so that the state of VBOX registry remains clean without any leftover "aborted" VMs in it. Failure to cleanup of such partial VMs results in a warning log so that actual define error stays on the top of the error stack. --- src/vbox/vbox_common.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 92ee37164..812c940e6 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -1853,6 +1853,8 @@ vboxDomainDefineXMLFlags(virConnectPtr conn, const ch= ar *xml, unsigned int flags char uuidstr[VIR_UUID_STRING_BUFLEN]; virDomainPtr ret =3D NULL; unsigned int parse_flags =3D VIR_DOMAIN_DEF_PARSE_INACTIVE; + bool machineReady =3D false; + =20 virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL); =20 @@ -1862,12 +1864,12 @@ vboxDomainDefineXMLFlags(virConnectPtr conn, const = char *xml, unsigned int flags if (!data->vboxObj) return ret; =20 - VBOX_IID_INITIALIZE(&mchiid); if (!(def =3D virDomainDefParseString(xml, data->caps, data->xmlopt, NULL, parse_flags))) { - goto cleanup; + return ret; } =20 + VBOX_IID_INITIALIZE(&mchiid); virUUIDFormat(def->uuid, uuidstr); =20 rc =3D gVBoxAPI.UIVirtualBox.CreateMachine(data, def, &machine, uuidst= r); @@ -1959,30 +1961,41 @@ vboxDomainDefineXMLFlags(virConnectPtr conn, const = char *xml, unsigned int flags vboxAttachUSB(def, data, machine); vboxAttachSharedFolder(def, data, machine); =20 - /* Save the machine settings made till now and close the - * session. also free up the mchiid variable used. + machineReady =3D true; + + cleanup: + /* Save the machine settings made till now, even when jumped here on e= rror, + * as otherwise unregister won't cleanup properly. For example, it won= 't + * close media that were partially attached. The VBOX SDK docs say that + * unregister implicitly calls saveSettings but evidently it's not so.= .. */ rc =3D gVBoxAPI.UIMachine.SaveSettings(machine); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("failed no saving settings, rc=3D%08x"), (unsigne= d)rc); - goto cleanup; + _("Failed to save VM settings, rc=3D%08x"), rc); + machineReady =3D false; } =20 gVBoxAPI.UISession.Close(data->vboxSession); - vboxIIDUnalloc(&mchiid); - - ret =3D virGetDomain(conn, def->name, def->uuid, -1); - VBOX_RELEASE(machine); =20 - virDomainDefFree(def); + if (machineReady) { + ret =3D virGetDomain(conn, def->name, def->uuid, -1); + } else { + /* Unregister incompletely configured VM to not leave garbage behi= nd */ + rc =3D gVBoxAPI.unregisterMachine(data, &mchiid, &machine); =20 - return ret; + if (NS_SUCCEEDED(rc)) + gVBoxAPI.deleteConfig(machine); + else + VIR_WARN("Could not cleanup partially created VM after failure= , " + "rc=3D%08x", rc); + } =20 - cleanup: + vboxIIDUnalloc(&mchiid); VBOX_RELEASE(machine); virDomainDefFree(def); - return NULL; + + return ret; } =20 static virDomainPtr --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 150887375277683.11979825598519; Tue, 24 Oct 2017 12:35:52 -0700 (PDT) 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 B6515883C3; Tue, 24 Oct 2017 19:35:50 +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 286DD60BF2; Tue, 24 Oct 2017 19:35:50 +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 E78F46EF22; Tue, 24 Oct 2017 19:35:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZjXX009699 for ; Tue, 24 Oct 2017 15:35:45 -0400 Received: by smtp.corp.redhat.com (Postfix) id E9D605DA60; Tue, 24 Oct 2017 19:35:45 +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 E4F7A5D9CB for ; Tue, 24 Oct 2017 19:35:43 +0000 (UTC) Received: from mail-qt0-f173.google.com (mail-qt0-f173.google.com [209.85.216.173]) (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 272967E421 for ; Tue, 24 Oct 2017 19:35:42 +0000 (UTC) Received: by mail-qt0-f173.google.com with SMTP id p1so31940577qtg.2 for ; Tue, 24 Oct 2017 12:35:42 -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.40 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:40 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B6515883C3 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx02.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 B6515883C3 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="MD86vvag" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 272967E421 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 272967E421 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=f4lQzL9L3J8vFA9NX2G5lP4qwfm9WcSSGnmaYOdDrI4=; b=MD86vvagGvbUoiFnS4g4XlwzOw5XDjRopPSJqPmn856g2fDRpjJPm/5MfE9FJfX+Je ChSPGLSc7/kkCMa8gCcTGRhQB9c2Wgf5GpA2iKM/YZ5OYEPF2QPiazLt4MgfpX3Eh+Xb 4L9zQrWTlioZkUnPNlXXj/qRBw8LmlYRjQq36/RIlDlofAOQUyGvzDVNzdru54PNusqn Z5LZYvGI3qspuIFgTDVOk1TjgMIyJTdciI9VevX4r8w2YFME+jQ1OS4pvAsZQjd6raig hiJGWFlAsN33wuA/cGhDoz8ma8n+wcOa5f8Xcv2oduDjYJGjp1N0cL4VdkdpkPxfVvUV 2O7A== 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=f4lQzL9L3J8vFA9NX2G5lP4qwfm9WcSSGnmaYOdDrI4=; b=uFffQpaUx5W7VqpRFJkkNH1WHhYOoru9Z4ZEeNt89GdpZ/Vj3ZYGKnNwtfHGEuJx04 r+J24fny4vcT8gxfADFS9cfRGm2Bf2n17jhwHqsZwvaaOmuwu202leGCOhlCry1930+T eomybE9wJQpaoTGiYnG621Ypmhfug6CcrThQATNFiyf+TDC2BA19KLbsyhHCVVNeeI5o r1OJNLJkG/TV+G8rc0MFeCRovvMvRUT5JuC2XD3ugKoeSUSYOYGMDLUWO5j4E6UWwVPS XKLT6nHBRc+u7NyQPfUqT5gS3twwMt/m+9bxO8qyM3VmjTHCoTziNQxFD9lbFjT5HaEE 7GHg== X-Gm-Message-State: AMCzsaVMsx78uzJXRBm4AZwMVGimxw9a1a2amh6HVx5pVehOMivVt0zo KllS/8J01sdQjW+UviE8lIM7rhA6dag= X-Google-Smtp-Source: ABhQp+S6/eB7ve80J9QVukHJB2QBTH55Tz1BbM0yEaf6qe5Uhc3AeSZzOyI0StuG4RhRz7BdrJAr/Q== X-Received: by 10.200.43.8 with SMTP id 8mr26829723qtu.193.1508873741161; Tue, 24 Oct 2017 12:35:41 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:27 -0400 Message-Id: <20171024193538.9078-5-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:42 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 24 Oct 2017 19:35:42 +0000 (UTC) for IP:'209.85.216.173' DOMAIN:'mail-qt0-f173.google.com' HELO:'mail-qt0-f173.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: -0.031 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_PASS) 209.85.216.173 mail-qt0-f173.google.com 209.85.216.173 mail-qt0-f173.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 04/15] vbox: vboxAttachDrives now relies on address info 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.26]); Tue, 24 Oct 2017 19:35:51 +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, the driver was computing VBOX's devicePort/deviceSlot values based on device name and max port/slot values. While this worked, it completely ignored
values. Additionally, libvirt's built-in virDomainDiskDefAssignAddress already does a good job setting default values on virDomainDeviceDriveAddress struct which we can use to set devicePort and deviceSlot and accomplish the same result while allowing the cusomizing those via XML. Also, this allows to remove some code which will make further patches smaller. Reviewed-by: John Ferlan --- src/vbox/vbox_common.c | 104 ++++-----------------------------------------= ---- 1 file changed, 7 insertions(+), 97 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 812c940e6..fa8471e68 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -346,68 +346,6 @@ static bool vboxGetMaxPortSlotValues(IVirtualBox *vbox, return true; } =20 -/** - * function to get the StorageBus, Port number - * and Device number for the given devicename - * e.g: hda has StorageBus =3D IDE, port =3D 0, - * device =3D 0 - * - * @returns true on Success, false on failure. - * @param deviceName Input device name - * @param aMaxPortPerInst Input array of max port per device instance - * @param aMaxSlotPerPort Input array of max slot per device port - * @param storageBus Input storage bus type - * @param deviceInst Output device instance number - * @param devicePort Output port number - * @param deviceSlot Output slot number - * - */ -static bool vboxGetDeviceDetails(const char *deviceName, - PRUint32 *aMaxPortPerInst, - PRUint32 *aMaxSlotPerPort, - PRUint32 storageBus, - PRInt32 *deviceInst, - PRInt32 *devicePort, - PRInt32 *deviceSlot) -{ - int total =3D 0; - PRUint32 maxPortPerInst =3D 0; - PRUint32 maxSlotPerPort =3D 0; - - if (!deviceName || - !deviceInst || - !devicePort || - !deviceSlot || - !aMaxPortPerInst || - !aMaxSlotPerPort) - return false; - - if ((storageBus < StorageBus_IDE) || - (storageBus > StorageBus_Floppy)) - return false; - - total =3D virDiskNameToIndex(deviceName); - - maxPortPerInst =3D aMaxPortPerInst[storageBus]; - maxSlotPerPort =3D aMaxSlotPerPort[storageBus]; - - if (!maxPortPerInst || - !maxSlotPerPort || - (total < 0)) - return false; - - *deviceInst =3D total / (maxPortPerInst * maxSlotPerPort); - *devicePort =3D (total % (maxPortPerInst * maxSlotPerPort)) / maxSlotP= erPort; - *deviceSlot =3D (total % (maxPortPerInst * maxSlotPerPort)) % maxSlotP= erPort; - - VIR_DEBUG("name=3D%s, total=3D%d, storageBus=3D%u, deviceInst=3D%d, " - "devicePort=3D%d deviceSlot=3D%d, maxPortPerInst=3D%u maxSlotPer= Port=3D%u", - deviceName, total, storageBus, *deviceInst, *devicePort, - *deviceSlot, maxPortPerInst, maxSlotPerPort); - - return true; -} - /** * function to generate the name for medium, * for e.g: hda, sda, etc @@ -1022,14 +960,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) { size_t i; nsresult rc =3D 0; - PRUint32 maxPortPerInst[StorageBus_Floppy + 1] =3D {}; - PRUint32 maxSlotPerPort[StorageBus_Floppy + 1] =3D {}; PRUnichar *storageCtlName =3D NULL; - bool error =3D false; - - /* get the max port/slots/etc for the given storage bus */ - error =3D !vboxGetMaxPortSlotValues(data->vboxObj, maxPortPerInst, - maxSlotPerPort); =20 /* add a storage controller for the mediums to be attached */ /* this needs to change when multiple controller are supported for @@ -1071,7 +1002,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) VBOX_RELEASE(storageCtl); } =20 - for (i =3D 0; i < def->ndisks && !error; i++) { + for (i =3D 0; i < def->ndisks; i++) { const char *src =3D virDomainDiskGetSource(def->disks[i]); int type =3D virDomainDiskGetType(def->disks[i]); int format =3D virDomainDiskGetFormat(def->disks[i]); @@ -1095,12 +1026,10 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) IMedium *medium =3D NULL; vboxIID mediumUUID; PRUnichar *mediumFileUtf16 =3D NULL; - PRUint32 storageBus =3D StorageBus_Null; PRUint32 deviceType =3D DeviceType_Null; PRUint32 accessMode =3D AccessMode_ReadOnly; - PRInt32 deviceInst =3D 0; - PRInt32 devicePort =3D 0; - PRInt32 deviceSlot =3D 0; + PRInt32 devicePort =3D def->disks[i]->info.addr.drive.unit; + PRInt32 deviceSlot =3D def->disks[i]->info.addr.drive.bus; =20 VBOX_IID_INITIALIZE(&mediumUUID); VBOX_UTF8_TO_UTF16(src, &mediumFileUtf16); @@ -1166,35 +1095,16 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) =20 if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { VBOX_UTF8_TO_UTF16("IDE Controller", &storageCtlName); - storageBus =3D StorageBus_IDE; + devicePort =3D def->disks[i]->info.addr.drive.bus; + deviceSlot =3D def->disks[i]->info.addr.drive.unit; } else if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA)= { VBOX_UTF8_TO_UTF16("SATA Controller", &storageCtlName); - storageBus =3D StorageBus_SATA; } else if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI)= { VBOX_UTF8_TO_UTF16("SCSI Controller", &storageCtlName); - storageBus =3D StorageBus_SCSI; } else if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_FDC) { VBOX_UTF8_TO_UTF16("Floppy Controller", &storageCtlName); - storageBus =3D StorageBus_Floppy; - } - - /* get the device details i.e instance, port and slot */ - if (!vboxGetDeviceDetails(def->disks[i]->dst, - maxPortPerInst, - maxSlotPerPort, - storageBus, - &deviceInst, - &devicePort, - &deviceSlot)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("can't get the port/slot number of " - "harddisk/dvd/floppy to be attached: " - "%s, rc=3D%08x"), - src, (unsigned)rc); - VBOX_MEDIUM_RELEASE(medium); - vboxIIDUnalloc(&mediumUUID); - VBOX_UTF16_FREE(mediumFileUtf16); - continue; + devicePort =3D 0; + deviceSlot =3D def->disks[i]->info.addr.drive.unit; } =20 /* attach the harddisk/dvd/Floppy to the storage controller */ --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873766645718.4989748767977; Tue, 24 Oct 2017 12:36:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 06E5F5F17E; Tue, 24 Oct 2017 19:36:05 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D1B895D6A8; Tue, 24 Oct 2017 19:36:04 +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 90CDF180448C; Tue, 24 Oct 2017 19:36:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZkTr009704 for ; Tue, 24 Oct 2017 15:35:46 -0400 Received: by smtp.corp.redhat.com (Postfix) id 030AC173D2; Tue, 24 Oct 2017 19:35:46 +0000 (UTC) Received: from mx1.redhat.com (ext-mx09.extmail.prod.ext.phx2.redhat.com [10.5.110.38]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F191C5C8A1 for ; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: from mail-qt0-f177.google.com (mail-qt0-f177.google.com [209.85.216.177]) (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 ACA5AFEB1 for ; Tue, 24 Oct 2017 19:35:42 +0000 (UTC) Received: by mail-qt0-f177.google.com with SMTP id v41so31891750qtv.12 for ; Tue, 24 Oct 2017 12:35:42 -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.41 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:41 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 06E5F5F17E 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 06E5F5F17E 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="q3OVQdh9" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com ACA5AFEB1 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com ACA5AFEB1 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=9DCPxvkg0HAt13TsGkHooWfRd07OLqRbZVcriUdcPkE=; b=q3OVQdh9lTwc5e7WzLbiiLKk2OA5PyQQ6Rx4qn03VXILPG2VqcmP+reEaUYImfLHmS egKiv1t4zOsf/DlOBZDCWxvyJrtmoL1CB4hIr/aE3T9mSmOlXIZ/7jRYHhdAFOj8ATyY JONtfA+y1OG3uIIhoOidwqDC1BS49jOCEEkLte2WqAUVi0/BFTJ89xt0HZUzahHMGzsq s6K9oJ+kUOOhaInD/3b00u+iPkvvhIGqxeHh6oryPmMwUbbFLUjxpynXhTw7u2CNxYuB RPfsjCRR9AMEZKIw6w8t3zd60cMcY2lWT4cKWOMbAOKeif8xzG0NZ8U49KIZ1e/8v0Vm W7jQ== 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=9DCPxvkg0HAt13TsGkHooWfRd07OLqRbZVcriUdcPkE=; b=NmBF0V4n7Eb6X93b/QfUsA7egPi5Snq1pmfHnssjW0n5LHesQmWDDrOXPAF5DFHuSs 5gfjClTveu/VRmZpd2loz/8EpfFPZXroVqmlG4fQ3dQzOTaQF7v0/Z5pBJ+TP6ZrmvQI +cnxX5cH5jewoOpXUMTxmgirIKSG0SpAlyypVVeyu8yCKNrIqmHM/7cKJGeRJqscWETb GeP+9gUU92/pdcDG4mknxqZ7DRoa8kDzAb18g8HlO4OqSoX9+9MEL3YQqRKKm1bKRA9W ZAFQzAQb4dXHwL8o53XLqNyQ/zwcHg4atCrmtr3ZC4pqC+thcK6Qw2NJ87Sbklai2vix 1Ggg== X-Gm-Message-State: AMCzsaXK9J4U53n3+VuNi/q/EcRQWuZy+sv/6uz9Ek33JLAKC2L5Pkne P7BFa/MTW36gb2bP68a4ht6Cj/5+Xsk= X-Google-Smtp-Source: ABhQp+TnmD0DVlkS1vAQapWY2Qb9fvI2mgvkx6t4AJkK23o8czhVUsTyDC6z09f+cO/eonVW+OZEcQ== X-Received: by 10.237.34.28 with SMTP id n28mr27182074qtc.30.1508873741619; Tue, 24 Oct 2017 12:35:41 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:28 -0400 Message-Id: <20171024193538.9078-6-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.38]); Tue, 24 Oct 2017 19:35:42 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 24 Oct 2017 19:35:42 +0000 (UTC) for IP:'209.85.216.177' DOMAIN:'mail-qt0-f177.google.com' HELO:'mail-qt0-f177.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.177 mail-qt0-f177.google.com 209.85.216.177 mail-qt0-f177.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.38 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 05/15] vbox: Cleanup vboxAttachDrives implementation 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 24 Oct 2017 19:36:05 +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 commit primes vboxAttachDrives for further changes so when they are made, the diff is less noisy: * move variable declarations to the top of the function * add disk variable to replace all the def->disks[i] instances * add cleanup at the end of the loop body, so it's all in one place rather than scattered through the loop body. It's purposefully called 'cleanup' rather than 'skip' or 'continue' because future commit will treat errors as hard-failures. Reviewed-by: John Ferlan --- src/vbox/vbox_common.c | 95 ++++++++++++++++++++++++----------------------= ---- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index fa8471e68..b949c4db7 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -959,8 +959,17 @@ static void vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr data, IMachine *machin= e) { size_t i; + int type, format; + const char *src =3D NULL; nsresult rc =3D 0; + virDomainDiskDefPtr disk =3D NULL; PRUnichar *storageCtlName =3D NULL; + IMedium *medium =3D NULL; + PRUnichar *mediumFileUtf16 =3D NULL, *mediumEmpty =3D NULL; + PRUint32 devicePort, deviceSlot, deviceType, accessMode; + vboxIID mediumUUID; + + VBOX_IID_INITIALIZE(&mediumUUID); =20 /* add a storage controller for the mediums to be attached */ /* this needs to change when multiple controller are supported for @@ -1003,57 +1012,50 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) } =20 for (i =3D 0; i < def->ndisks; i++) { - const char *src =3D virDomainDiskGetSource(def->disks[i]); - int type =3D virDomainDiskGetType(def->disks[i]); - int format =3D virDomainDiskGetFormat(def->disks[i]); + disk =3D def->disks[i]; + src =3D virDomainDiskGetSource(disk); + type =3D virDomainDiskGetType(disk); + format =3D virDomainDiskGetFormat(disk); + deviceType =3D DeviceType_Null; + accessMode =3D AccessMode_ReadOnly; + devicePort =3D disk->info.addr.drive.unit; + deviceSlot =3D disk->info.addr.drive.bus; =20 VIR_DEBUG("disk(%zu) type: %d", i, type); - VIR_DEBUG("disk(%zu) device: %d", i, def->disks[i]->device); - VIR_DEBUG("disk(%zu) bus: %d", i, def->disks[i]->bus); + VIR_DEBUG("disk(%zu) device: %d", i, disk->device); + VIR_DEBUG("disk(%zu) bus: %d", i, disk->bus); VIR_DEBUG("disk(%zu) src: %s", i, src); - VIR_DEBUG("disk(%zu) dst: %s", i, def->disks[i]->dst); + VIR_DEBUG("disk(%zu) dst: %s", i, disk->dst); VIR_DEBUG("disk(%zu) driverName: %s", i, - virDomainDiskGetDriver(def->disks[i])); + virDomainDiskGetDriver(disk)); VIR_DEBUG("disk(%zu) driverType: %s", i, virStorageFileFormatTypeToString(format)); - VIR_DEBUG("disk(%zu) cachemode: %d", i, def->disks[i]->cachemode); - VIR_DEBUG("disk(%zu) readonly: %s", i, (def->disks[i]->src->read= only + VIR_DEBUG("disk(%zu) cachemode: %d", i, disk->cachemode); + VIR_DEBUG("disk(%zu) readonly: %s", i, (disk->src->readonly ? "True" : "False")); - VIR_DEBUG("disk(%zu) shared: %s", i, (def->disks[i]->src->shar= ed + VIR_DEBUG("disk(%zu) shared: %s", i, (disk->src->shared ? "True" : "False")); =20 if (type =3D=3D VIR_STORAGE_TYPE_FILE && src) { - IMedium *medium =3D NULL; - vboxIID mediumUUID; - PRUnichar *mediumFileUtf16 =3D NULL; - PRUint32 deviceType =3D DeviceType_Null; - PRUint32 accessMode =3D AccessMode_ReadOnly; - PRInt32 devicePort =3D def->disks[i]->info.addr.drive.unit; - PRInt32 deviceSlot =3D def->disks[i]->info.addr.drive.bus; - - VBOX_IID_INITIALIZE(&mediumUUID); VBOX_UTF8_TO_UTF16(src, &mediumFileUtf16); =20 - if (def->disks[i]->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { deviceType =3D DeviceType_HardDisk; accessMode =3D AccessMode_ReadWrite; - } else if (def->disks[i]->device =3D=3D VIR_DOMAIN_DISK_DEVICE= _CDROM) { + } else if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { deviceType =3D DeviceType_DVD; accessMode =3D AccessMode_ReadOnly; - } else if (def->disks[i]->device =3D=3D VIR_DOMAIN_DISK_DEVICE= _FLOPPY) { + } else if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY) { deviceType =3D DeviceType_Floppy; accessMode =3D AccessMode_ReadWrite; } else { - VBOX_UTF16_FREE(mediumFileUtf16); - continue; + goto cleanup; } =20 gVBoxAPI.UIVirtualBox.FindHardDisk(data->vboxObj, mediumFileUt= f16, deviceType, accessMode, &me= dium); =20 if (!medium) { - PRUnichar *mediumEmpty =3D NULL; - VBOX_UTF8_TO_UTF16("", &mediumEmpty); =20 rc =3D gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, @@ -1066,45 +1068,41 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) if (!medium) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to attach the following disk/dvd/= floppy " - "to the machine: %s, rc=3D%08x"), - src, (unsigned)rc); - VBOX_UTF16_FREE(mediumFileUtf16); - continue; + "to the machine: %s, rc=3D%08x"), src, rc= ); + goto cleanup; } =20 rc =3D gVBoxAPI.UIMedium.GetId(medium, &mediumUUID); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("can't get the uuid of the file to be att= ached " + _("Can't get the UUID of the file to be att= ached " "as harddisk/dvd/floppy: %s, rc=3D%08x"), - src, (unsigned)rc); - VBOX_MEDIUM_RELEASE(medium); - VBOX_UTF16_FREE(mediumFileUtf16); - continue; + src, rc); + goto cleanup; } =20 - if (def->disks[i]->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { - if (def->disks[i]->src->readonly) { + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { + if (disk->src->readonly) { gVBoxAPI.UIMedium.SetType(medium, MediumType_Immutable= ); - VIR_DEBUG("setting harddisk to immutable"); - } else if (!def->disks[i]->src->readonly) { + VIR_DEBUG("Setting harddisk to immutable"); + } else if (!disk->src->readonly) { gVBoxAPI.UIMedium.SetType(medium, MediumType_Normal); - VIR_DEBUG("setting harddisk type to normal"); + VIR_DEBUG("Setting harddisk type to normal"); } } =20 - if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { VBOX_UTF8_TO_UTF16("IDE Controller", &storageCtlName); devicePort =3D def->disks[i]->info.addr.drive.bus; deviceSlot =3D def->disks[i]->info.addr.drive.unit; - } else if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA)= { + } else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA) { VBOX_UTF8_TO_UTF16("SATA Controller", &storageCtlName); - } else if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI)= { + } else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI) { VBOX_UTF8_TO_UTF16("SCSI Controller", &storageCtlName); - } else if (def->disks[i]->bus =3D=3D VIR_DOMAIN_DISK_BUS_FDC) { + } else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_FDC) { VBOX_UTF8_TO_UTF16("Floppy Controller", &storageCtlName); devicePort =3D 0; - deviceSlot =3D def->disks[i]->info.addr.drive.unit; + deviceSlot =3D disk->info.addr.drive.unit; } =20 /* attach the harddisk/dvd/Floppy to the storage controller */ @@ -1117,13 +1115,12 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) =20 if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("could not attach the file as " - "harddisk/dvd/floppy: %s, rc=3D%08x"), - src, (unsigned)rc); + _("Could not attach the file as " + "harddisk/dvd/floppy: %s, rc=3D%08x"), sr= c, rc); } else { DEBUGIID("Attached HDD/DVD/Floppy with UUID", &mediumUUID); } - + cleanup: VBOX_MEDIUM_RELEASE(medium); vboxIIDUnalloc(&mediumUUID); VBOX_UTF16_FREE(mediumFileUtf16); --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873778383343.88226511475386; Tue, 24 Oct 2017 12:36:18 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DAB5633A167; Tue, 24 Oct 2017 19:36:16 +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 B19126024F; Tue, 24 Oct 2017 19:36:16 +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 43E5E6EF30; Tue, 24 Oct 2017 19:36:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZlsV009725 for ; Tue, 24 Oct 2017 15:35:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0835560F8B; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: from mx1.redhat.com (ext-mx02.extmail.prod.ext.phx2.redhat.com [10.5.110.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 026C760F84 for ; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: from mail-qt0-f178.google.com (mail-qt0-f178.google.com [209.85.216.178]) (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 278D4806C2 for ; Tue, 24 Oct 2017 19:35:43 +0000 (UTC) Received: by mail-qt0-f178.google.com with SMTP id 8so31965143qtv.1 for ; Tue, 24 Oct 2017 12:35:43 -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.41 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:41 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DAB5633A167 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx10.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 DAB5633A167 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="rmkz3viQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 278D4806C2 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 278D4806C2 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=rm5UL81oqsJRgMCNkRwhq5YKiQaBUWaH3NEI1l8x2Fg=; b=rmkz3viQ9QlYRIEivHwOvXaTHtSD+7kBzftL3UFkSxnlIhBxGP2+8YjRx0/NuCC+ls bY0ETIn/n2Gc9ZBVLKTZ9PSnnA3O5LxtGW+Cg3mAjcuhVlf7IeRa6UQJVJCjgzIwZRrz J1y+5uo+OzoMsmEeC9IshEQan0KqusHb20mGxEm5CnBBq3YjbC2XRij+hoQqiCBOsEL6 F7d/fuMAfzhOE4MMZLIU3RxXkORMe/lz/EbjPR7y0VvuvChF8LVSErSUDbXE7eLlWRIj ez+9t3qKs+IER9ChVrQS2kMzJ+rSrldOIjhxYEICtqZoOwLQJvL6VWwwugYxg0uJmxhn mpHQ== 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=rm5UL81oqsJRgMCNkRwhq5YKiQaBUWaH3NEI1l8x2Fg=; b=qGm0BPi9Jjrkdg0P0+l7iMcguzy0EJEHGfU76jaSnXdwPbTDTXjZLnyKL/yi/8jeXy DSK3rSbQ6z3qGPbMObVBKIcHQ2qXgOTbXSgbZtbFXQwKVuU4rhss3ESRZVTwfh85IYHj OMbzfxuh2oDkU5ZXN88p4xhLHNWZt4qYsR9aj9jlQTa+CgshXRsb9eechDhKzw5oggFT CEcdu75vmmQ6jK6kvWq1bD0VUacua6LSeaEGSWr7DiyF/olEg0b0XhrgBn1b4EccaJvF cZrpL8mdYrh0EdK2vQx8d6a5rY+aXpKrRNVxfob+dNyTguafmqDOvMUzI2fKH9lsf488 ZU2A== X-Gm-Message-State: AMCzsaVoCrll1UWoFw/8WC5BrKKr8+9CKfOC9Qb5SxXpCAUUKqqNcyqH vRjHR2IohBaBvzN8A7Dr+XC88uas2Co= X-Google-Smtp-Source: ABhQp+Tvhxx8xHpKeT457XA+D0OqGtNXxBTZHsdhzzDO75rNODizz0NL/vn6X73xogUj4Afj4u6NiQ== X-Received: by 10.237.63.15 with SMTP id p15mr26594999qtf.155.1508873742097; Tue, 24 Oct 2017 12:35:42 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:29 -0400 Message-Id: <20171024193538.9078-7-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.26]); Tue, 24 Oct 2017 19:35:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 24 Oct 2017 19:35:43 +0000 (UTC) for IP:'209.85.216.178' DOMAIN:'mail-qt0-f178.google.com' HELO:'mail-qt0-f178.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: -0.221 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.216.178 mail-qt0-f178.google.com 209.85.216.178 mail-qt0-f178.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.26 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 06/15] vbox: Errors in vboxAttachDrives are now critical 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 24 Oct 2017 19:36:17 +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, if one tried to define a VBOX VM and the API failed to perform the requested actions for some reason, it would just log the error and move on to process remaining disk definitions. This is not desired as it could result in incorrectly defined VM without the caller even knowing about it. So now all the code paths that call virReportError are now treated as hard failures as they should have been. Reviewed-by: John Ferlan --- src/vbox/vbox_common.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index b949c4db7..9f4bf18a3 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -955,17 +955,17 @@ vboxSetBootDeviceOrder(virDomainDefPtr def, vboxDrive= rPtr data, } } =20 -static void +static int vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr data, IMachine *machin= e) { size_t i; - int type, format; + int type, format, ret =3D 0; const char *src =3D NULL; nsresult rc =3D 0; virDomainDiskDefPtr disk =3D NULL; PRUnichar *storageCtlName =3D NULL; IMedium *medium =3D NULL; - PRUnichar *mediumFileUtf16 =3D NULL, *mediumEmpty =3D NULL; + PRUnichar *mediumFileUtf16 =3D NULL; PRUint32 devicePort, deviceSlot, deviceType, accessMode; vboxIID mediumUUID; =20 @@ -1049,6 +1049,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) deviceType =3D DeviceType_Floppy; accessMode =3D AccessMode_ReadWrite; } else { + ret =3D -1; goto cleanup; } =20 @@ -1056,19 +1057,17 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) deviceType, accessMode, &me= dium); =20 if (!medium) { - VBOX_UTF8_TO_UTF16("", &mediumEmpty); - rc =3D gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, mediumFileUtf16, deviceType, accessMo= de, &medium); - VBOX_UTF16_FREE(mediumEmpty); } =20 if (!medium) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to attach the following disk/dvd/= floppy " "to the machine: %s, rc=3D%08x"), src, rc= ); + ret =3D -1; goto cleanup; } =20 @@ -1078,6 +1077,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) _("Can't get the UUID of the file to be att= ached " "as harddisk/dvd/floppy: %s, rc=3D%08x"), src, rc); + ret =3D -1; goto cleanup; } =20 @@ -1117,6 +1117,8 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) virReportError(VIR_ERR_INTERNAL_ERROR, _("Could not attach the file as " "harddisk/dvd/floppy: %s, rc=3D%08x"), sr= c, rc); + ret =3D -1; + goto cleanup; } else { DEBUGIID("Attached HDD/DVD/Floppy with UUID", &mediumUUID); } @@ -1125,8 +1127,13 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr = data, IMachine *machine) vboxIIDUnalloc(&mediumUUID); VBOX_UTF16_FREE(mediumFileUtf16); VBOX_UTF16_FREE(storageCtlName); + + if (ret < 0) + break; } } + + return ret; } =20 static void @@ -1857,7 +1864,8 @@ vboxDomainDefineXMLFlags(virConnectPtr conn, const ch= ar *xml, unsigned int flags gVBoxAPI.UISession.GetMachine(data->vboxSession, &machine); =20 vboxSetBootDeviceOrder(def, data, machine); - vboxAttachDrives(def, data, machine); + if (vboxAttachDrives(def, data, machine) < 0) + goto cleanup; vboxAttachSound(def, machine); if (vboxAttachNetwork(def, data, machine) < 0) goto cleanup; --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873778311631.2174826529969; Tue, 24 Oct 2017 12:36:18 -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 A5C11CD262; Tue, 24 Oct 2017 19:36:16 +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 8545A18006; Tue, 24 Oct 2017 19:36:16 +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 196D76EF2D; Tue, 24 Oct 2017 19:36:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZlic009740 for ; Tue, 24 Oct 2017 15:35:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id 563295D6AE; Tue, 24 Oct 2017 19:35:47 +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 4E9FF5D6A6 for ; Tue, 24 Oct 2017 19:35:45 +0000 (UTC) Received: from mail-qt0-f179.google.com (mail-qt0-f179.google.com [209.85.216.179]) (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 A46776A7DF for ; Tue, 24 Oct 2017 19:35:43 +0000 (UTC) Received: by mail-qt0-f179.google.com with SMTP id k31so31967997qta.6 for ; Tue, 24 Oct 2017 12:35:43 -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.42 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:42 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A5C11CD262 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx09.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 A5C11CD262 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="EDwbGCCy" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A46776A7DF 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 A46776A7DF 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=kia/pzGsaZim+j2VFw3+GUA/P4XWILZAGRBYO4Fq8kY=; b=EDwbGCCycISiRj1PXnHh8b9KR5YL7xO9LlIZCsZHIjIG4g1V/UjMD5+A+rTRSUsDiY zFD1El9w47kIdD1o1U3WWLmoloJAq0sh/75wREkWjLTlk0D13pQ5GN0NfiTde4H0kj3d SkY4UPhMDBGeC3yuYPM0RFPmW10rfA8t9qktTFDcebjh9MR9GcPLWqZPg3Kv9qVQ8RJJ qOfbaqTLsCuCvQbPGSjKdyc6OqcK4lhO4B1DugfiuhM2BHmXwSgaCKE0+tfjsGL2gs+Z 5no0vmPsSQf6GamtcDwsyJKdQ5oJ/4At2cjx2WYD7AVe6ynx5GGS2YgZprn+APfINWk0 JWUg== 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=kia/pzGsaZim+j2VFw3+GUA/P4XWILZAGRBYO4Fq8kY=; b=gfCHCLn3grmUlUX1eiTRz3edcRLt/ciFotsCQ9z6u/vwHFD+y6kCZb+HRGVodFmmzz pHxoOXDPzEE0buRpqOfI8SBMu5ql3809whj3j32NATWeb+ZmPoHrmR2pEpturZfSkAW2 zb923bmE0oyCVZaV0YQm2ZPJ2TP+mOLPtzcbXda0P8ziIBskqLWaZVOHIB8NTMaGRMWU 591QMZHvwqO4vmp6d+QuHnJZoKPBsU3Cg8cI5I8lLf6qlE8S73HUUMK2OQzeMkaAvthD iuJ7Q5YBr2giZdjSnoYImcE4wxRiNFIEzePRZ8IWl18ZPfIbztMldKEddyRrX7dlGfvR cWdg== X-Gm-Message-State: AMCzsaWc5fdYmbnjUFXoa38NonT6ga2oMnXU4XGt8y2thurFkgc1MQOu e5mqge7IfETp8+6FOGB6fmuWs3XpD3Y= X-Google-Smtp-Source: ABhQp+T5zfU6hw7HM21b4DiyTyEp/fiScNBvC6aY6AGLWUEpibTmpuGmLrrev9tKBsfFOo+uX5ZfYg== X-Received: by 10.200.46.58 with SMTP id r55mr27163877qta.244.1508873742582; Tue, 24 Oct 2017 12:35:42 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:30 -0400 Message-Id: <20171024193538.9078-8-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:44 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 24 Oct 2017 19:35:44 +0000 (UTC) for IP:'209.85.216.179' DOMAIN:'mail-qt0-f179.google.com' HELO:'mail-qt0-f179.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: -0.221 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.216.179 mail-qt0-f179.google.com 209.85.216.179 mail-qt0-f179.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 07/15] vbox: Support empty removable drives. 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.38]); Tue, 24 Oct 2017 19:36:17 +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" Original code was checking for non empty disk source before proceeding to actually attach disk device to VM. This prevented from creating empty removable devices like DVD or floppy. Therefore, this patch re-organizes the loop work-flow to allow such configurations as well as makes the code follow better libvirt practices. Additionally, adjusted debug logs to be more helpful - removed old ones and added new which give more valuable info for troubleshooting. Reviewed-by: John Ferlan --- src/vbox/vbox_common.c | 206 +++++++++++++++++++++++++++++++--------------= ---- 1 file changed, 130 insertions(+), 76 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 9f4bf18a3..2bd891efb 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -959,11 +959,12 @@ static int vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr data, IMachine *machin= e) { size_t i; - int type, format, ret =3D 0; + int type, ret =3D 0; const char *src =3D NULL; nsresult rc =3D 0; virDomainDiskDefPtr disk =3D NULL; PRUnichar *storageCtlName =3D NULL; + char *controllerName =3D NULL; IMedium *medium =3D NULL; PRUnichar *mediumFileUtf16 =3D NULL; PRUint32 devicePort, deviceSlot, deviceType, accessMode; @@ -1015,47 +1016,104 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPt= r data, IMachine *machine) disk =3D def->disks[i]; src =3D virDomainDiskGetSource(disk); type =3D virDomainDiskGetType(disk); - format =3D virDomainDiskGetFormat(disk); deviceType =3D DeviceType_Null; accessMode =3D AccessMode_ReadOnly; devicePort =3D disk->info.addr.drive.unit; deviceSlot =3D disk->info.addr.drive.bus; =20 - VIR_DEBUG("disk(%zu) type: %d", i, type); - VIR_DEBUG("disk(%zu) device: %d", i, disk->device); - VIR_DEBUG("disk(%zu) bus: %d", i, disk->bus); - VIR_DEBUG("disk(%zu) src: %s", i, src); - VIR_DEBUG("disk(%zu) dst: %s", i, disk->dst); - VIR_DEBUG("disk(%zu) driverName: %s", i, - virDomainDiskGetDriver(disk)); - VIR_DEBUG("disk(%zu) driverType: %s", i, - virStorageFileFormatTypeToString(format)); - VIR_DEBUG("disk(%zu) cachemode: %d", i, disk->cachemode); - VIR_DEBUG("disk(%zu) readonly: %s", i, (disk->src->readonly - ? "True" : "False")); - VIR_DEBUG("disk(%zu) shared: %s", i, (disk->src->shared - ? "True" : "False")); - - if (type =3D=3D VIR_STORAGE_TYPE_FILE && src) { - VBOX_UTF8_TO_UTF16(src, &mediumFileUtf16); + if (type !=3D VIR_STORAGE_TYPE_FILE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unsupported storage type %s, the only suppor= ted " + "type is %s"), + virStorageTypeToString(type), + virStorageTypeToString(VIR_STORAGE_TYPE_FILE)); + ret =3D -1; + goto cleanup; + } =20 - if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { - deviceType =3D DeviceType_HardDisk; - accessMode =3D AccessMode_ReadWrite; - } else if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { - deviceType =3D DeviceType_DVD; - accessMode =3D AccessMode_ReadOnly; - } else if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY) { - deviceType =3D DeviceType_Floppy; - accessMode =3D AccessMode_ReadWrite; - } else { + switch ((virDomainDiskDevice) disk->device) { + case VIR_DOMAIN_DISK_DEVICE_DISK: + if (!src) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Missing disk source file path")); ret =3D -1; goto cleanup; } =20 - gVBoxAPI.UIVirtualBox.FindHardDisk(data->vboxObj, mediumFileUt= f16, - deviceType, accessMode, &me= dium); + deviceType =3D DeviceType_HardDisk; + accessMode =3D AccessMode_ReadWrite; + + break; + + case VIR_DOMAIN_DISK_DEVICE_CDROM: + deviceType =3D DeviceType_DVD; + accessMode =3D AccessMode_ReadOnly; + + break; + case VIR_DOMAIN_DISK_DEVICE_FLOPPY: + deviceType =3D DeviceType_Floppy; + accessMode =3D AccessMode_ReadWrite; + + break; + case VIR_DOMAIN_DISK_DEVICE_LUN: + case VIR_DOMAIN_DISK_DEVICE_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("The vbox driver does not support %s disk dev= ice"), + virDomainDiskDeviceTypeToString(disk->device)); + ret =3D -1; + goto cleanup; + } + + switch ((virDomainDiskBus) disk->bus) { + case VIR_DOMAIN_DISK_BUS_IDE: + VBOX_UTF8_TO_UTF16("IDE Controller", &storageCtlName); + devicePort =3D def->disks[i]->info.addr.drive.bus; + deviceSlot =3D def->disks[i]->info.addr.drive.unit; + + break; + case VIR_DOMAIN_DISK_BUS_SATA: + VBOX_UTF8_TO_UTF16("SATA Controller", &storageCtlName); + + break; + case VIR_DOMAIN_DISK_BUS_SCSI: + VBOX_UTF8_TO_UTF16("SCSI Controller", &storageCtlName); + + break; + case VIR_DOMAIN_DISK_BUS_FDC: + VBOX_UTF8_TO_UTF16("Floppy Controller", &storageCtlName); + devicePort =3D 0; + deviceSlot =3D disk->info.addr.drive.unit; + + break; + case VIR_DOMAIN_DISK_BUS_VIRTIO: + case VIR_DOMAIN_DISK_BUS_XEN: + case VIR_DOMAIN_DISK_BUS_USB: + case VIR_DOMAIN_DISK_BUS_UML: + case VIR_DOMAIN_DISK_BUS_SD: + case VIR_DOMAIN_DISK_BUS_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("The vbox driver does not support %s bus type= "), + virDomainDiskBusTypeToString(disk->bus)); + ret =3D -1; + goto cleanup; + } =20 + /* If disk source is specified, lookup IMedium - removable drives = don't + * have either. + */ + if (src) { + VBOX_UTF8_TO_UTF16(src, &mediumFileUtf16); + VIR_DEBUG("Looking up medium %s, type: %d, mode: %d", src, + deviceType, accessMode); + + rc =3D gVBoxAPI.UIVirtualBox.FindHardDisk(data->vboxObj, mediu= mFileUtf16, + deviceType, accessMode= , &medium); + + /* The following is not needed for vbox 4.2+ but older version= s have + * distinct find and open operations where the former looks in= vbox + * media registry while the latter at storage location. In 4.2= +, the + * OpenMedium call takes care of both cases internally + */ if (!medium) { rc =3D gVBoxAPI.UIVirtualBox.OpenMedium(data->vboxObj, mediumFileUtf16, @@ -1065,7 +1123,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) =20 if (!medium) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to attach the following disk/dvd/= floppy " + _("Failed to open the following disk/dvd/fl= oppy " "to the machine: %s, rc=3D%08x"), src, rc= ); ret =3D -1; goto cleanup; @@ -1080,57 +1138,53 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) ret =3D -1; goto cleanup; } + } =20 - if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { - if (disk->src->readonly) { - gVBoxAPI.UIMedium.SetType(medium, MediumType_Immutable= ); - VIR_DEBUG("Setting harddisk to immutable"); - } else if (!disk->src->readonly) { - gVBoxAPI.UIMedium.SetType(medium, MediumType_Normal); - VIR_DEBUG("Setting harddisk type to normal"); - } + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { + if (disk->src->readonly) { + gVBoxAPI.UIMedium.SetType(medium, MediumType_Immutable); + VIR_DEBUG("Setting hard disk to immutable"); + } else if (!disk->src->readonly) { + gVBoxAPI.UIMedium.SetType(medium, MediumType_Normal); + VIR_DEBUG("Setting hard disk type to normal"); } =20 - if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { - VBOX_UTF8_TO_UTF16("IDE Controller", &storageCtlName); - devicePort =3D def->disks[i]->info.addr.drive.bus; - deviceSlot =3D def->disks[i]->info.addr.drive.unit; - } else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA) { - VBOX_UTF8_TO_UTF16("SATA Controller", &storageCtlName); - } else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI) { - VBOX_UTF8_TO_UTF16("SCSI Controller", &storageCtlName); - } else if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_FDC) { - VBOX_UTF8_TO_UTF16("Floppy Controller", &storageCtlName); - devicePort =3D 0; - deviceSlot =3D disk->info.addr.drive.unit; - } + } =20 - /* attach the harddisk/dvd/Floppy to the storage controller */ - rc =3D gVBoxAPI.UIMachine.AttachDevice(machine, - storageCtlName, - devicePort, - deviceSlot, - deviceType, - medium); + VBOX_UTF16_TO_UTF8(storageCtlName, &controllerName); + VIR_DEBUG("Attaching disk(%zu), controller: %s, port: %d, slot: %d= , " + "type: %d, medium: %s", i, controllerName, devicePort, + deviceSlot, deviceType, medium =3D=3D NULL ? "empty" := src); + VBOX_UTF8_FREE(controllerName); =20 - if (NS_FAILED(rc)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not attach the file as " - "harddisk/dvd/floppy: %s, rc=3D%08x"), sr= c, rc); - ret =3D -1; - goto cleanup; - } else { - DEBUGIID("Attached HDD/DVD/Floppy with UUID", &mediumUUID); - } - cleanup: - VBOX_MEDIUM_RELEASE(medium); - vboxIIDUnalloc(&mediumUUID); - VBOX_UTF16_FREE(mediumFileUtf16); - VBOX_UTF16_FREE(storageCtlName); + /* Attach the harddisk/dvd/Floppy to the storage controller, + * medium =3D=3D NULL is ok here + */ + rc =3D gVBoxAPI.UIMachine.AttachDevice(machine, + storageCtlName, + devicePort, + deviceSlot, + deviceType, + medium); =20 - if (ret < 0) - break; + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not attach the file as " + "harddisk/dvd/floppy: %s, rc=3D%08x"), src, r= c); + ret =3D -1; + goto cleanup; + } else { + DEBUGIID("Attached HDD/DVD/Floppy with UUID", &mediumUUID); } + + cleanup: + VBOX_MEDIUM_RELEASE(medium); + vboxIIDUnalloc(&mediumUUID); + VBOX_UTF16_FREE(mediumFileUtf16); + VBOX_UTF16_FREE(storageCtlName); + + if (ret < 0) + break; } =20 return ret; --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873769607109.73361847326828; Tue, 24 Oct 2017 12:36:09 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E3FD6C0587F6; Tue, 24 Oct 2017 19:36:07 +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 A980618994; Tue, 24 Oct 2017 19:36:07 +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 704FD6EF29; Tue, 24 Oct 2017 19:36:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZjNQ009691 for ; Tue, 24 Oct 2017 15:35:45 -0400 Received: by smtp.corp.redhat.com (Postfix) id 39FD660A9D; Tue, 24 Oct 2017 19:35:45 +0000 (UTC) Received: from mx1.redhat.com (ext-mx01.extmail.prod.ext.phx2.redhat.com [10.5.110.25]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 33E42614FB for ; Tue, 24 Oct 2017 19:35:45 +0000 (UTC) Received: from mail-qk0-f171.google.com (mail-qk0-f171.google.com [209.85.220.171]) (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 425B385363 for ; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: by mail-qk0-f171.google.com with SMTP id n5so27713225qke.11 for ; Tue, 24 Oct 2017 12:35:44 -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.42 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:42 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E3FD6C0587F6 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx08.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 E3FD6C0587F6 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="mkJ5v2g6" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 425B385363 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 425B385363 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=UUufJZ1fcXfVBWacdYqNTNfTQc4NIC4YXtU2DI3Bj6M=; b=mkJ5v2g6xF1ZyFpPloqXSTvDU9iYa/Gb2H/QgEoaOQZeB+0sM16Bo/1C9JAI4cCa5J qPIGRt2qMnpwABY1bOZmR1edIBx6wFbaI2ymu6MYo8cOnnKnbouBFdMQF0MHx0TUlpRU ppc1arjsAy3FejHHLDfPiMUMaXwrMHW81pMsckqPkmKlLqT5Vgi5cmgubOVkIGT9C9Y9 /ZT1hOnxVkvhCF28CqTmKfcIE08QnAubYEfKdEW3MbngUqNB3PRWEMDDc0Hqr2J+e3Cj CFL/PsnjD8uRREOFPuAYt8J5g7nYHOoEKKARs+vb80995zVrY4A2YoTGZDT4iEYZJm8Z LXDQ== 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=UUufJZ1fcXfVBWacdYqNTNfTQc4NIC4YXtU2DI3Bj6M=; b=aaa4LCqUy7Sd5zfOFzxU7Ye0UQYjdkoQqC8RVuqDaZDFKocmOirP9DK3Y+DABO5LKn 2kQyC3Olc03y1Xn6IPtevKdutYDzjhDYWD7iVUvOcG0g8Na265EKdtTWti9cTLE1oGf4 RpzhszmsbNprPSfCFAYf0sWnVKXyTSUQOXXQCX/hCAHeUMdsLmJtpFfacLdRBMZ1vdXn CNlNOyW+lR9kAn8ArV3KutsnZaccRKGIW1iDd9YFCFhu4nLIebZ/OX52W29oi3DVMdFI JDChbHruWOlIO2D6595c8Ukw5ynbuRXiNymOgKKlmyYx+udoaG+XzXVM1x7IUi/W49zy Hh7g== X-Gm-Message-State: AMCzsaXOEpANM0imhTb20ex8eRMWgIgrlS2StoH4bxVrURwLcVeoxwEo xISfV5Qen40+QdQBf+GToXCzT76Qw0M= X-Google-Smtp-Source: ABhQp+TTdHIlbMaFpU+dxQqtFeZbpTSQJ6mIA+utsXey8v4hlKb06NBbLXIRybDiAbUJHu5Kd50+wA== X-Received: by 10.55.212.70 with SMTP id l67mr25892685qki.140.1508873743186; Tue, 24 Oct 2017 12:35:43 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:31 -0400 Message-Id: <20171024193538.9078-9-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.25]); Tue, 24 Oct 2017 19:35:44 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 24 Oct 2017 19:35:44 +0000 (UTC) for IP:'209.85.220.171' DOMAIN:'mail-qk0-f171.google.com' HELO:'mail-qk0-f171.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: -2.311 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.220.171 mail-qk0-f171.google.com 209.85.220.171 mail-qk0-f171.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.25 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 08/15] vbox: Add more IStorageController API mappings 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 24 Oct 2017 19:36:08 +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 exposes additional methods of the native VBOX API to the libvirt 'unified' vbox API to deal with IStorageController. The exposed methods are: * IStorageController->GetStorageControllerType() * IStorageController->SetStorageControllerType() * IMachine->GetStorageControllers() Reviewed-by: John Ferlan --- src/vbox/vbox_common.h | 13 +++++++++++++ src/vbox/vbox_tmpl.c | 20 ++++++++++++++++++++ src/vbox/vbox_uniformed_api.h | 3 +++ 3 files changed, 36 insertions(+) diff --git a/src/vbox/vbox_common.h b/src/vbox/vbox_common.h index c6da8929d..b08ad1e3e 100644 --- a/src/vbox/vbox_common.h +++ b/src/vbox/vbox_common.h @@ -235,6 +235,19 @@ enum StorageBus StorageBus_SAS =3D 5 }; =20 +enum StorageControllerType +{ + StorageControllerType_Null =3D 0, + StorageControllerType_LsiLogic =3D 1, + StorageControllerType_BusLogic =3D 2, + StorageControllerType_IntelAhci =3D 3, + StorageControllerType_PIIX3 =3D 4, + StorageControllerType_PIIX4 =3D 5, + StorageControllerType_ICH6 =3D 6, + StorageControllerType_I82078 =3D 7, + StorageControllerType_LsiLogicSas =3D 8 +}; + enum AccessMode { AccessMode_ReadOnly =3D 1, diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 2679b60f7..a25f14c09 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -550,6 +550,11 @@ static void* _handleUSBGetDeviceFilters(IUSBCommon *US= BCommon) return USBCommon->vtbl->GetDeviceFilters; } =20 +static void* _handleMachineGetStorageControllers(IMachine *machine) +{ + return machine->vtbl->GetStorageControllers; +} + static void* _handleMachineGetMediumAttachments(IMachine *machine) { return machine->vtbl->GetMediumAttachments; @@ -1916,6 +1921,18 @@ _storageControllerGetBus(IStorageController *storage= Controller, PRUint32 *bus) return storageController->vtbl->GetBus(storageController, bus); } =20 +static nsresult +_storageControllerGetControllerType(IStorageController *storageController,= PRUint32 *controllerType) +{ + return storageController->vtbl->GetControllerType(storageController, c= ontrollerType); +} + +static nsresult +_storageControllerSetControllerType(IStorageController *storageController,= PRUint32 controllerType) +{ + return storageController->vtbl->SetControllerType(storageController, c= ontrollerType); +} + static nsresult _sharedFolderGetHostPath(ISharedFolder *sharedFolder, PRUnichar **hostPath) { @@ -2265,6 +2282,7 @@ static vboxUniformedArray _UArray =3D { .handleGetMachines =3D _handleGetMachines, .handleGetHardDisks =3D _handleGetHardDisks, .handleUSBGetDeviceFilters =3D _handleUSBGetDeviceFilters, + .handleMachineGetStorageControllers =3D _handleMachineGetStorageContro= llers, .handleMachineGetMediumAttachments =3D _handleMachineGetMediumAttachme= nts, .handleMachineGetSharedFolders =3D _handleMachineGetSharedFolders, .handleSnapshotGetChildren =3D _handleSnapshotGetChildren, @@ -2496,6 +2514,8 @@ static vboxUniformedIMediumAttachment _UIMediumAttach= ment =3D { =20 static vboxUniformedIStorageController _UIStorageController =3D { .GetBus =3D _storageControllerGetBus, + .GetControllerType =3D _storageControllerGetControllerType, + .SetControllerType =3D _storageControllerSetControllerType, }; =20 static vboxUniformedISharedFolder _UISharedFolder =3D { diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h index 2ccaf43e8..dc0b391b2 100644 --- a/src/vbox/vbox_uniformed_api.h +++ b/src/vbox/vbox_uniformed_api.h @@ -135,6 +135,7 @@ typedef struct { void* (*handleGetMachines)(IVirtualBox *vboxObj); void* (*handleGetHardDisks)(IVirtualBox *vboxObj); void* (*handleUSBGetDeviceFilters)(IUSBCommon *USBCommon); + void* (*handleMachineGetStorageControllers)(IMachine *machine); void* (*handleMachineGetMediumAttachments)(IMachine *machine); void* (*handleMachineGetSharedFolders)(IMachine *machine); void* (*handleSnapshotGetChildren)(ISnapshot *snapshot); @@ -410,6 +411,8 @@ typedef struct { /* Functions for IStorageController */ typedef struct { nsresult (*GetBus)(IStorageController *storageController, PRUint32 *bu= s); + nsresult (*SetControllerType)(IStorageController *storageController, P= RUint32 controllerType); + nsresult (*GetControllerType)(IStorageController *storageController, P= RUint32 *controllerType); } vboxUniformedIStorageController; =20 /* Functions for ISharedFolder */ --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873772311771.9695269458177; Tue, 24 Oct 2017 12:36:12 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D0455C04AC5A; Tue, 24 Oct 2017 19:36:08 +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 ADF6F5DA6A; Tue, 24 Oct 2017 19:36:08 +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 77E7B6EF2B; Tue, 24 Oct 2017 19:36:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZkOI009709 for ; Tue, 24 Oct 2017 15:35:46 -0400 Received: by smtp.corp.redhat.com (Postfix) id 46BBA614EB; Tue, 24 Oct 2017 19:35:46 +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 3FFAF60A9D for ; Tue, 24 Oct 2017 19:35:46 +0000 (UTC) Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) (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 B991085543 for ; Tue, 24 Oct 2017 19:35:44 +0000 (UTC) Received: by mail-qk0-f195.google.com with SMTP id o187so27739350qke.7 for ; Tue, 24 Oct 2017 12:35:44 -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.43 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:43 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D0455C04AC5A Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx07.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 D0455C04AC5A 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="11JkkdzF" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B991085543 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 B991085543 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=jITCDoueJWp6kw3KWakUl42JpdcCFZJJ3/DweIn9jSA=; b=11JkkdzF8ws85TKFrpk7Df+FLBJqWfmf/JLxTFqb+qbXL0CPq0RukU0xNVDKYSaIQl fDIWm4sUuu8n6ZBxqLFYGOE0LjbYMjKEEzZ5NdOgJwlIVZ5DF9NICrXN9NnDos7arj6N +rMattPhyQk/YHTYh3H3Um3AU/CmJBCiC/zn/Za+8opPDUiEpFROdvNwihzk4DCUqPuC FkUaqqVhDxjPLt1X4MwneEopcwseckCVn+bkkGqe2mp9ImXnZDqp2vR+dO/B0PCznbd+ sbbqXkPyHl1FGZDD8pfvOap5UPAxHQscxe6adwuixBU6TshQMk9TCIBm8pzQsjA20mLr a3ng== 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=jITCDoueJWp6kw3KWakUl42JpdcCFZJJ3/DweIn9jSA=; b=jDHkrJZjf5Ky5PNXRNgIhVdG0ZiyBnLNB6O3jk45Of1fosIpCxlyyx7lASxJh009Yr knuEGAzp8JDz9CKVBH2w4EaVZB+QnDufvLt9u/6G7DAFWQ/yDbCXVz7EMwldPZxw+ncA Ts0N+3Smeo46pvgME8pagfhOUFd8t6Fu7k48tZkXi7JOCUsEg5p5gcAAFbwpZy5G1Fp/ ysK7nkQFLpUm+tc7vrsswWAFJAf/OsebHNwjuLTFEx/U6FpX1qtj+yayCBDLNNPQDfL8 wzFH/35eLe2wOyNkfFKR+cioo4lFydShaB9dAY66R4DBxk207K2UiUQ8kRATQMIWKnDb /8uw== X-Gm-Message-State: AMCzsaUo9+fHYklJnJ3soUJJ6bZbQbD6xfBjZC3AxBoVAe9UYFsNeJLS 1uE3C57DQ9X88ceTYHqV2Ud73HGy7Z0= X-Google-Smtp-Source: ABhQp+QSztbEaTTOKdzEZEeYL3QuruCmObGCEL9kRonVSxfKJpjLArfydGoDGjzA6nYQUqVJDCbNzQ== X-Received: by 10.233.221.133 with SMTP id r127mr23929254qkf.205.1508873743700; Tue, 24 Oct 2017 12:35:43 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:32 -0400 Message-Id: <20171024193538.9078-10-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.28]); Tue, 24 Oct 2017 19:35:45 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 24 Oct 2017 19:35:45 +0000 (UTC) for IP:'209.85.220.195' DOMAIN:'mail-qk0-f195.google.com' HELO:'mail-qk0-f195.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.220.195 mail-qk0-f195.google.com 209.85.220.195 mail-qk0-f195.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.28 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 09/15] domain: Allow 'model' attribute for ide controller 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 Oct 2017 19:36: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" The optional values are 'piix3', 'piix4' or 'ich6'. Those will be needed to allow setting IDE controller model in VirtualBox driver. Reviewed-by: John Ferlan --- docs/formatdomain.html.in | 4 ++++ docs/schemas/domaincommon.rng | 18 ++++++++++++++++-- src/conf/domain_conf.c | 9 +++++++++ src/conf/domain_conf.h | 9 +++++++++ src/libvirt_private.syms | 2 ++ 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 4609e2ec2..8dff685ad 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3648,6 +3648,10 @@ Since 1.3.5, USB controllers accept a ports attribute to configure how many devices can be connected to the controller. +
ide
+
Since 3.9.0 for the vbox driver, = the + ide controller has an optional attribute + model, which is one of "piix3", "piix4" or "ich6". =20

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 710b3af7f..9cec1a063 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1975,12 +1975,11 @@ - + fdc - ide sata ccid @@ -2041,6 +2040,21 @@ + + + + ide + + + + + piix3 + piix4 + ich6 + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 77c20c697..57f291624 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -377,6 +377,11 @@ VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_= CONTROLLER_MODEL_USB_LAST, "qemu-xhci", "none") =20 +VIR_ENUM_IMPL(virDomainControllerModelIDE, VIR_DOMAIN_CONTROLLER_MODEL_IDE= _LAST, + "piix3", + "piix4", + "ich6") + VIR_ENUM_IMPL(virDomainFS, VIR_DOMAIN_FS_TYPE_LAST, "mount", "block", @@ -9785,6 +9790,8 @@ virDomainControllerModelTypeFromString(const virDomai= nControllerDef *def, return virDomainControllerModelUSBTypeFromString(model); else if (def->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI) return virDomainControllerModelPCITypeFromString(model); + else if (def->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IDE) + return virDomainControllerModelIDETypeFromString(model); =20 return -1; } @@ -9800,6 +9807,8 @@ virDomainControllerModelTypeToString(virDomainControl= lerDefPtr def, return virDomainControllerModelUSBTypeToString(model); else if (def->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_PCI) return virDomainControllerModelPCITypeToString(model); + else if (def->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IDE) + return virDomainControllerModelIDETypeToString(model); =20 return NULL; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 38de70b15..0def905b2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -748,6 +748,14 @@ typedef enum { VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST } virDomainControllerModelUSB; =20 +typedef enum { + VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX3, + VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX4, + VIR_DOMAIN_CONTROLLER_MODEL_IDE_ICH6, + + VIR_DOMAIN_CONTROLLER_MODEL_IDE_LAST +} virDomainControllerModelIDE; + # define IS_USB2_CONTROLLER(ctrl) \ (((ctrl)->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_USB) && \ ((ctrl)->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1 || \ @@ -3219,6 +3227,7 @@ VIR_ENUM_DECL(virDomainControllerModelPCI) VIR_ENUM_DECL(virDomainControllerPCIModelName) VIR_ENUM_DECL(virDomainControllerModelSCSI) VIR_ENUM_DECL(virDomainControllerModelUSB) +VIR_ENUM_DECL(virDomainControllerModelIDE) VIR_ENUM_DECL(virDomainFS) VIR_ENUM_DECL(virDomainFSDriver) VIR_ENUM_DECL(virDomainFSAccessMode) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 448d962b2..2e67366b7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -234,6 +234,8 @@ virDomainControllerFindUnusedIndex; virDomainControllerInsert; virDomainControllerInsertPreAlloced; virDomainControllerIsPSeriesPHB; +virDomainControllerModelIDETypeFromString; +virDomainControllerModelIDETypeToString; virDomainControllerModelPCITypeToString; virDomainControllerModelSCSITypeFromString; virDomainControllerModelSCSITypeToString; --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873770592719.0113593892313; Tue, 24 Oct 2017 12:36:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D11C1285BA; Tue, 24 Oct 2017 19:36:08 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AABF918994; Tue, 24 Oct 2017 19:36:08 +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 7266C180610F; Tue, 24 Oct 2017 19:36:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZkac009720 for ; Tue, 24 Oct 2017 15:35:46 -0400 Received: by smtp.corp.redhat.com (Postfix) id E4A4A5C552; Tue, 24 Oct 2017 19:35:46 +0000 (UTC) Received: from mx1.redhat.com (ext-mx02.extmail.prod.ext.phx2.redhat.com [10.5.110.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DF66E5C8A1 for ; Tue, 24 Oct 2017 19:35:46 +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 3D763883BE for ; Tue, 24 Oct 2017 19:35:45 +0000 (UTC) Received: by mail-qt0-f175.google.com with SMTP id k31so31968086qta.6 for ; Tue, 24 Oct 2017 12:35:45 -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.43 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:43 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D11C1285BA Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx06.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 D11C1285BA 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="v3tkRCFv" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3D763883BE Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 3D763883BE 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=N2yXn+b7nEE0/8fykFwQcSWb0eGXaS3b0VWrwIZD66M=; b=v3tkRCFvf+ujngzPsIlmslktych0or7lQTD+ZgYXlrahxPVF4lntf9owGJjCfBIuJv NoyxM9Fy7E30bnmGENbDYqRV1ePRFoS+BtY7b7jDMTDhV9hM3Rh4Dx4Q/2HNt8Ew8BRF cmKQg/EFgM1izsCn8RlHy+We1jVCHe9iw14Q/v5XyPZQ/L/R3VUfBZWkaZiolSqQQ1ih InqMC3s7/s3ByquNZ9/lxOp9t6Ed/9OXcoBqoZ62yWx+OG5MDqdXXJvG5wlFP3GzSnE1 1JWQ1UsZpEtwjA8Bk4LOpdFFgT8KXX8HIeRhsen9DhJPG2639LUvoPl24Kir9fRDGqei Ubww== 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=N2yXn+b7nEE0/8fykFwQcSWb0eGXaS3b0VWrwIZD66M=; b=aDSvJ7pjRXccrgEvYZSauFaSLSR3/98O/55hvkYELMgC5cpFoEVqFjg0uDVT1ODyb1 H5geyBiR+bn3TuQWkvYJKgb36JjzfaFtnwFg44CUimi1wVFSzP39bW7XrG+oUkjR+vRo 2QMPuJDBVXNMIuEEnbls5u+u0KgTcREHS234fNT/UJDbLVC3ziWZoULxex7RQKRSA4m1 6X1V/wnkOHhktw5rPSxnPImPfFAyFuC41XJRE6dIDe7bCPOBsucd1ZmnPc9NRPPrWW9a JuiXgDctB7j+wfQwWPy4mztZPCmyzhJCAwiRlLcra536eQrHK6DwtIboEOwD4sqxuGrG orYA== X-Gm-Message-State: AMCzsaWRHdBvXnPXOXNW/AFkJFbcS292Mff5grmBIQCAmuUG8QdJBtzE cm+H7whuwY9YjeIjE5Ts5x73fPfB0AI= X-Google-Smtp-Source: ABhQp+R3J3njTXsHu3Edm0N0MpBlw7+GGzT2jjPcsRwHKKlNoeIPdoYOYPLvk0nRBPxyoB1VBSemXw== X-Received: by 10.200.25.45 with SMTP id t42mr27449518qtj.305.1508873744170; Tue, 24 Oct 2017 12:35:44 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:33 -0400 Message-Id: <20171024193538.9078-11-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.26]); Tue, 24 Oct 2017 19:35:45 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 24 Oct 2017 19:35:45 +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.26 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 10/15] vbox: Process element in domain XML 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 24 Oct 2017 19:36: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 enables the VBOX driver to process the element in domain XML through which one can now customize the controller model. Since VirtualBox has two distinct SAS and SCSI they do not "map" directly to libvirt XML, he VBOX driver uses to create SAS controller in VBOX VM. Additionally once can set model on the IDE controller to be one of "piix3", "piix4" or "ich6". --- src/vbox/vbox_common.c | 214 ++++++++++++++++++++++++++++++++++++++-------= ---- src/vbox/vbox_common.h | 8 ++ 2 files changed, 176 insertions(+), 46 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 2bd891efb..9d45e4a76 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -406,6 +406,160 @@ static char *vboxGenerateMediumName(PRUint32 storageB= us, return name; } =20 + +static int +vboxSetStorageController(virDomainControllerDefPtr controller, + vboxDriverPtr data, + IMachine *machine) +{ + PRUnichar *controllerName =3D NULL; + PRInt32 vboxModel =3D StorageControllerType_Null; + PRInt32 vboxBusType =3D StorageBus_Null; + IStorageController *vboxController =3D NULL; + nsresult rc =3D 0; + char *debugName =3D NULL; + int ret =3D -1; + + /* libvirt controller type =3D> vbox bus type */ + switch ((virDomainControllerType) controller->type) { + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_FLOPPY_NAME, &controllerName); + vboxBusType =3D StorageBus_Floppy; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_IDE_NAME, &controllerName); + vboxBusType =3D StorageBus_IDE; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SCSI_NAME, &controllerName); + vboxBusType =3D StorageBus_SCSI; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_SATA: + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SATA_NAME, &controllerName); + vboxBusType =3D StorageBus_SATA; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: + case VIR_DOMAIN_CONTROLLER_TYPE_CCID: + case VIR_DOMAIN_CONTROLLER_TYPE_USB: + case VIR_DOMAIN_CONTROLLER_TYPE_PCI: + case VIR_DOMAIN_CONTROLLER_TYPE_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("The vbox driver does not support %s controller t= ype"), + virDomainControllerTypeToString(controller->type)); + return -1; + } + + /* libvirt scsi model =3D> vbox scsi model */ + if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { + switch ((virDomainControllerModelSCSI) controller->model) { + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO: + vboxModel =3D StorageControllerType_LsiLogic; + + break; + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC: + vboxModel =3D StorageControllerType_BusLogic; + + break; + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068: + /* in vbox, lsisas has a dedicated SAS bus type with no model = */ + VBOX_UTF16_FREE(controllerName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SAS_NAME, &controllerName); + vboxBusType =3D StorageBus_SAS; + + break; + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("The vbox driver does not support %s SCSI " + "controller model"), + virDomainControllerModelSCSITypeToString(contro= ller->model)); + goto cleanup; + } + /* libvirt ide model =3D> vbox ide model */ + } else if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IDE) { + switch ((virDomainControllerModelIDE) controller->model) { + case VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX3: + vboxModel =3D StorageControllerType_PIIX3; + + break; + case VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX4: + vboxModel =3D StorageControllerType_PIIX4; + + break; + case VIR_DOMAIN_CONTROLLER_MODEL_IDE_ICH6: + vboxModel =3D StorageControllerType_ICH6; + + break; + case VIR_DOMAIN_CONTROLLER_MODEL_IDE_LAST: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("The vbox driver does not support %s IDE " + "controller model"), + virDomainControllerModelIDETypeToString(contr= oller->model)); + goto cleanup; + } + } + + VBOX_UTF16_TO_UTF8(controllerName, &debugName); + VIR_DEBUG("Adding VBOX storage controller (name: %s, busType: %d)", + debugName, vboxBusType); + + rc =3D gVBoxAPI.UIMachine.AddStorageController(machine, controllerName, + vboxBusType, &vboxControl= ler); + + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to add storage controller " + "(name: %s, busType: %d), rc=3D%08x"), + debugName, vboxBusType, rc); + goto cleanup; + } + + /* only IDE or SCSI controller have model choices */ + if (vboxModel !=3D StorageControllerType_Null) { + rc =3D gVBoxAPI.UIStorageController.SetControllerType(vboxControll= er, + vboxModel); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to change storage controller model, " + "rc=3D%08x"), rc); + goto cleanup; + } + } + + ret =3D 0; + + cleanup: + VBOX_UTF16_FREE(controllerName); + VBOX_UTF8_FREE(debugName); + VBOX_RELEASE(vboxController); + + return ret; +} + + +static int +vboxAttachStorageControllers(virDomainDefPtr def, + vboxDriverPtr data, + IMachine *machine) +{ + size_t i; + for (i =3D 0; i < def->ncontrollers; i++) { + if (vboxSetStorageController(def->controllers[i], data, machine) <= 0) + return -1; + } + + return 0; +} + + static virDrvOpenStatus vboxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, @@ -959,7 +1113,7 @@ static int vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr data, IMachine *machin= e) { size_t i; - int type, ret =3D 0; + int type, ret =3D 0, model =3D -1; const char *src =3D NULL; nsresult rc =3D 0; virDomainDiskDefPtr disk =3D NULL; @@ -972,46 +1126,6 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) =20 VBOX_IID_INITIALIZE(&mediumUUID); =20 - /* add a storage controller for the mediums to be attached */ - /* this needs to change when multiple controller are supported for - * ver > 3.1 */ - { - IStorageController *storageCtl =3D NULL; - PRUnichar *sName =3D NULL; - - VBOX_UTF8_TO_UTF16("IDE Controller", &sName); - gVBoxAPI.UIMachine.AddStorageController(machine, - sName, - StorageBus_IDE, - &storageCtl); - VBOX_UTF16_FREE(sName); - VBOX_RELEASE(storageCtl); - - VBOX_UTF8_TO_UTF16("SATA Controller", &sName); - gVBoxAPI.UIMachine.AddStorageController(machine, - sName, - StorageBus_SATA, - &storageCtl); - VBOX_UTF16_FREE(sName); - VBOX_RELEASE(storageCtl); - - VBOX_UTF8_TO_UTF16("SCSI Controller", &sName); - gVBoxAPI.UIMachine.AddStorageController(machine, - sName, - StorageBus_SCSI, - &storageCtl); - VBOX_UTF16_FREE(sName); - VBOX_RELEASE(storageCtl); - - VBOX_UTF8_TO_UTF16("Floppy Controller", &sName); - gVBoxAPI.UIMachine.AddStorageController(machine, - sName, - StorageBus_Floppy, - &storageCtl); - VBOX_UTF16_FREE(sName); - VBOX_RELEASE(storageCtl); - } - for (i =3D 0; i < def->ndisks; i++) { disk =3D def->disks[i]; src =3D virDomainDiskGetSource(disk); @@ -1066,21 +1180,28 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr= data, IMachine *machine) =20 switch ((virDomainDiskBus) disk->bus) { case VIR_DOMAIN_DISK_BUS_IDE: - VBOX_UTF8_TO_UTF16("IDE Controller", &storageCtlName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_IDE_NAME, &storageCtlName); devicePort =3D def->disks[i]->info.addr.drive.bus; deviceSlot =3D def->disks[i]->info.addr.drive.unit; =20 break; case VIR_DOMAIN_DISK_BUS_SATA: - VBOX_UTF8_TO_UTF16("SATA Controller", &storageCtlName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SATA_NAME, &storageCtlName); =20 break; case VIR_DOMAIN_DISK_BUS_SCSI: - VBOX_UTF8_TO_UTF16("SCSI Controller", &storageCtlName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SCSI_NAME, &storageCtlName); + + model =3D virDomainDeviceFindControllerModel(def, &disk->info, + VIR_DOMAIN_CONTROLL= ER_TYPE_SCSI); + if (model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068) { + VBOX_UTF16_FREE(storageCtlName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SAS_NAME, &storageCtlNa= me); + } =20 break; case VIR_DOMAIN_DISK_BUS_FDC: - VBOX_UTF8_TO_UTF16("Floppy Controller", &storageCtlName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_FLOPPY_NAME, &storageCtlNam= e); devicePort =3D 0; deviceSlot =3D disk->info.addr.drive.unit; =20 @@ -1148,7 +1269,6 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) gVBoxAPI.UIMedium.SetType(medium, MediumType_Normal); VIR_DEBUG("Setting hard disk type to normal"); } - } =20 VBOX_UTF16_TO_UTF8(storageCtlName, &controllerName); @@ -1918,6 +2038,8 @@ vboxDomainDefineXMLFlags(virConnectPtr conn, const ch= ar *xml, unsigned int flags gVBoxAPI.UISession.GetMachine(data->vboxSession, &machine); =20 vboxSetBootDeviceOrder(def, data, machine); + if (vboxAttachStorageControllers(def, data, machine) < 0) + goto cleanup; if (vboxAttachDrives(def, data, machine) < 0) goto cleanup; vboxAttachSound(def, machine); diff --git a/src/vbox/vbox_common.h b/src/vbox/vbox_common.h index b08ad1e3e..3340374c1 100644 --- a/src/vbox/vbox_common.h +++ b/src/vbox/vbox_common.h @@ -326,6 +326,14 @@ enum HardDiskVariant # define VBOX_E_INVALID_SESSION_STATE 0x80BB000B # define VBOX_E_OBJECT_IN_USE 0x80BB000C =20 +/* VBOX storage controller name definitions */ + +# define VBOX_CONTROLLER_IDE_NAME "IDE Controller" +# define VBOX_CONTROLLER_FLOPPY_NAME "Floppy Controller" +# define VBOX_CONTROLLER_SATA_NAME "SATA Controller" +# define VBOX_CONTROLLER_SCSI_NAME "SCSI Controller" +# define VBOX_CONTROLLER_SAS_NAME "SAS Controller" + /* Simplied definitions in vbox_CAPI_*.h */ =20 typedef void const *PCVBOXXPCOM; --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873773828488.8298741270156; Tue, 24 Oct 2017 12:36:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DE873267FA; Tue, 24 Oct 2017 19:36:11 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B56BC60246; Tue, 24 Oct 2017 19:36:11 +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 6F4CB1805966; Tue, 24 Oct 2017 19:36:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZl1K009733 for ; Tue, 24 Oct 2017 15:35:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2C32F173D2; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: from mx1.redhat.com (ext-mx10.extmail.prod.ext.phx2.redhat.com [10.5.110.39]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 275FE5C552 for ; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: from mail-qt0-f171.google.com (mail-qt0-f171.google.com [209.85.216.171]) (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 BC85C5D687 for ; Tue, 24 Oct 2017 19:35:45 +0000 (UTC) Received: by mail-qt0-f171.google.com with SMTP id v41so31891957qtv.12 for ; Tue, 24 Oct 2017 12:35:45 -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.44 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:44 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DE873267FA Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx06.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 DE873267FA 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="JSonsbFp" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BC85C5D687 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com BC85C5D687 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=+bBHEiZxIve7xms39aahFiiO+gtmDpfVS+9wb62pyMI=; b=JSonsbFpq++iN/0x3Jl9sfBdSbq6o499n63jUjUCJ+lM3wtPbGqiPh5TYXpeCV4oRi Tb2Ngga0CC/eTM+0Wh28vX+29wEkaKeMv2WQ2oxHSycGw9msHVYz1vDi6lv5kA9aIFQJ RlLejG4xmmxCj1JmppZ0IfbwOE/jRiL4N9iqJr5zYyfl951ZaFY0sZghr526afk2/cez yuc0Z+elL5emSxXn2cZPuGm4EvsAdH0EQT5WD5cSNx1vywy3Wozau+bkoWxMA1qbmeQX 3KQZt6/SZZUtXphZHln2tUPjCkl+jHTA1NeenzYyk91Klj1SYNeM/eU3h9UR0E6WkJ+P zwbQ== 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=+bBHEiZxIve7xms39aahFiiO+gtmDpfVS+9wb62pyMI=; b=qOfIsElWMyQ9JhcitmaoKKhA7cqCXuAeOXh4yuyTgW13cCzuxWk3QjUDA9ONLDZ7qB PLx9Pr2/Q89dSKOptcj8znxKqsGpiIivxb1H+PZQNN2n8XXGtJYDmavXihKSalwOnrQ9 0jupXrp61dyHBqnraDUam3VF//jKbtB9LLQBOd12vdjfK2xqq1nQ8keTa9s5ziRC/HZY 0hHaWYjwU0HHLZzlUTcbZF5aPeR8MAwDwNb1rA/6SQSe1zxIP0UrRQCtFTuq0VkyyEJW V/q0padAXX5LKIC5Hsj7MnHfcZA1yCti3jMXuyd3RXopnsidsLTjbh1Ece/0bwigWIii cjOg== X-Gm-Message-State: AMCzsaVUQQo1tg4DHL46AY6y1UozacJvTDzjziIjNX6qswTvTgoHoliT Ih0aewrccIfxs5uG8xo/+ZgXiDHBOvU= X-Google-Smtp-Source: ABhQp+RhYuzoXXaKPtXZBm78xQkrTmLIiLNSaxyTvk9bj0Xu1q1JVcOAeijQxjn58r0CmyeGHwArgw== X-Received: by 10.200.28.70 with SMTP id j6mr26478060qtk.78.1508873744683; Tue, 24 Oct 2017 12:35:44 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:34 -0400 Message-Id: <20171024193538.9078-12-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.39]); Tue, 24 Oct 2017 19:35:46 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 24 Oct 2017 19:35:46 +0000 (UTC) for IP:'209.85.216.171' DOMAIN:'mail-qt0-f171.google.com' HELO:'mail-qt0-f171.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.171 mail-qt0-f171.google.com 209.85.216.171 mail-qt0-f171.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.39 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 11/15] vbox: Add vboxDumpStorageControllers 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 24 Oct 2017 19:36:12 +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" Reviewed-by: John Ferlan --- src/vbox/vbox_common.c | 119 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 119 insertions(+) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 9d45e4a76..715eb670e 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3153,6 +3153,123 @@ vboxHostDeviceGetXMLDesc(vboxDriverPtr data, virDom= ainDefPtr def, IMachine *mach goto release_filters; } =20 + +static int +vboxDumpStorageControllers(virDomainDefPtr def, IMachine *machine) +{ + vboxArray storageControllers =3D VBOX_ARRAY_INITIALIZER; + IStorageController *controller =3D NULL; + PRUint32 storageBus =3D StorageBus_Null; + PRUint32 controllerType =3D StorageControllerType_Null; + virDomainControllerDefPtr cont =3D NULL; + size_t i =3D 0; + int model =3D -1, ret =3D -1; + virDomainControllerType type =3D VIR_DOMAIN_CONTROLLER_TYPE_LAST; + + gVBoxAPI.UArray.vboxArrayGet(&storageControllers, machine, + gVBoxAPI.UArray.handleMachineGetStorageControllers(machin= e)); + + for (i =3D 0; i < storageControllers.count; i++) { + controller =3D storageControllers.items[i]; + storageBus =3D StorageBus_Null; + controllerType =3D StorageControllerType_Null; + type =3D VIR_DOMAIN_CONTROLLER_TYPE_LAST; + model =3D -1; + + if (!controller) + continue; + + gVBoxAPI.UIStorageController.GetBus(controller, &storageBus); + gVBoxAPI.UIStorageController.GetControllerType(controller, + &controllerType); + + /* vbox controller model =3D> libvirt controller model */ + switch ((enum StorageControllerType) controllerType) { + case StorageControllerType_PIIX3: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX3; + + break; + case StorageControllerType_PIIX4: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX4; + + break; + case StorageControllerType_ICH6: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_IDE_ICH6; + + break; + case StorageControllerType_BusLogic: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC; + + break; + case StorageControllerType_LsiLogic: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; + + break; + case StorageControllerType_LsiLogicSas: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068; + + break; + case StorageControllerType_IntelAhci: + case StorageControllerType_I82078: + case StorageControllerType_Null: + model =3D -1; + + break; + } + + /* vbox controller bus =3D> libvirt controller type */ + switch ((enum StorageBus) storageBus) { + case StorageBus_IDE: + type =3D VIR_DOMAIN_CONTROLLER_TYPE_IDE; + + break; + case StorageBus_SCSI: + case StorageBus_SAS: + type =3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI; + + break; + case StorageBus_SATA: + type =3D VIR_DOMAIN_CONTROLLER_TYPE_SATA; + + break; + case StorageBus_Floppy: + type =3D VIR_DOMAIN_CONTROLLER_TYPE_FDC; + + break; + case StorageBus_Null: + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unsupported null storage bus")); + + goto cleanup; + } + + if (type !=3D VIR_DOMAIN_CONTROLLER_TYPE_LAST) { + cont =3D virDomainDefAddController(def, type, -1, model); + if (!cont) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to add %s controller type definit= ion"), + virDomainControllerTypeToString(type)); + goto cleanup; + } + } + } + + ret =3D 0; + + cleanup: + gVBoxAPI.UArray.vboxArrayRelease(&storageControllers); + + if (ret < 0) { + for (i =3D 0; i < def->ncontrollers; i++) + virDomainControllerDefFree(def->controllers[i]); + VIR_FREE(def->controllers); + def->ncontrollers =3D 0; + } + + return ret; +} + + static void vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr data, IMachine *machine) { @@ -4000,6 +4117,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, u= nsigned int flags) goto cleanup; if (vboxDumpDisplay(def, data, machine) < 0) goto cleanup; + if (vboxDumpStorageControllers(def, machine) < 0) + goto cleanup; =20 vboxDumpIDEHDDs(def, data, machine); =20 --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873784624959.1383327865409; Tue, 24 Oct 2017 12:36:24 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1ABB2C04AC64; Tue, 24 Oct 2017 19:36:23 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E7B89189E6; Tue, 24 Oct 2017 19:36:22 +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 50334180596C; Tue, 24 Oct 2017 19:36:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZoOk009772 for ; Tue, 24 Oct 2017 15:35:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id AA5735C552; Tue, 24 Oct 2017 19:35:50 +0000 (UTC) Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A51B25C8A1 for ; Tue, 24 Oct 2017 19:35:50 +0000 (UTC) Received: from mail-qt0-f173.google.com (mail-qt0-f173.google.com [209.85.216.173]) (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 5C19CC0587F6 for ; Tue, 24 Oct 2017 19:35:46 +0000 (UTC) Received: by mail-qt0-f173.google.com with SMTP id p1so31940839qtg.2 for ; Tue, 24 Oct 2017 12:35:46 -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.44 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:44 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1ABB2C04AC64 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx07.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 1ABB2C04AC64 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="gelbyiG1" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5C19CC0587F6 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5C19CC0587F6 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=22c9oOYwGb0PzuLmq30ncoO6HZqm7GPeBpoL1IcY7vo=; b=gelbyiG1irSCAhdzGeb6eAfDSG3j09V52wQ6eZKXquhKveQocvtOc1SLhyM9elIpRC i0w7Oq3K3nkVmUIys3HHsIAl3b+DWIoSJBa5B06WYfg7T5LBnT4Wz0w+F07f0BnID50+ lLYbVJMvBPOSQFVr9HuhGX2+zVhnkJ0Xm8SutRvC1PdN4tQbPFkNbwp3YXk16WTfQRhz 1E6/nVmfFg0T1fAAuewpeB+2k4BUwb+erlkIEsE2cXW3dBCLF0M/DR06xPlVhkgZdnNq DC+WIM/bk3/IfhvTfw/DNzt7KHpIS2KbCPB3EWa4fure5rpR+5GevHx2pkZPGTOA0EJa A4Ug== 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=22c9oOYwGb0PzuLmq30ncoO6HZqm7GPeBpoL1IcY7vo=; b=ExKT3hfKXDcDzuhANuh5iI73UIstZx2fOjMFcBqYTWv9mL/1BVunzZT/7pniAetB3s HboD11dpY94Y79hIrd5oel8qzuDawNihCJKrI3pYvIpHXMmmI53n+F+H1N8AjURmBGUA /kw4b+0Cwe+dsrcbT9RpT7hKENxnj24g3RfP4rX4b5WNU8AlMkHfp2k4m1ZQHDth+Tm2 aaVs1kW9gAzGqqnWhQ6xvsfoxhEEmE6dm4nfFju0Ijgb6soKwaSPyGOG26O8sxr2V9Jx ozOB2THm6qAfjW+qgCojtj6w79I6pLDcU6mMAcRHPzZXmz5ZI2PVhz/ZDDAIHWKN0e+G 8xyg== X-Gm-Message-State: AMCzsaVfNWw53hfC+AYuavg7dDAB498Kwv++eRA5Da9Li3vyVHsy4ekX 4hVNoNTxZ8Oigufkh32a4KwgT+e/gFM= X-Google-Smtp-Source: ABhQp+SqJKJW0GTO2wFuNe6nzrcCau9qa7tPVty1JqbGT+PxK2TTL7BPaeX40nj8VZk4GI8heqF4oA== X-Received: by 10.200.8.149 with SMTP id v21mr26850696qth.123.1508873745183; Tue, 24 Oct 2017 12:35:45 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:35 -0400 Message-Id: <20171024193538.9078-13-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.32]); Tue, 24 Oct 2017 19:35:46 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 24 Oct 2017 19:35:46 +0000 (UTC) for IP:'209.85.216.173' DOMAIN:'mail-qt0-f173.google.com' HELO:'mail-qt0-f173.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: -0.031 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_PASS) 209.85.216.173 mail-qt0-f173.google.com 209.85.216.173 mail-qt0-f173.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 12/15] vbox: Correctly generate drive name 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 Oct 2017 19:36:23 +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" If a VBOX VM has e.g. a SATA and SCSI disk attached, the XML generated by dumpxml used to produce "sda" for both of those disks. This is an invalid domain XML as libvirt does not allow duplicate device names. To address this, keep the running total of disks that will use "sd" prefix for device name and pass it to the vboxGenerateMediumName which no longer tries to "compute" the value based only on current and max port and slot values. After this the vboxGetMaxPortSlotValues is not needed and was deleted. --- src/vbox/vbox_common.c | 414 +++++++++++++++++++++------------------------= ---- 1 file changed, 177 insertions(+), 237 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 715eb670e..9dc36a1b2 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -290,61 +290,6 @@ static int openSessionForMachine(vboxDriverPtr data, c= onst unsigned char *dom_uu return 0; } =20 -/** - * function to get the values for max port per - * instance and max slots per port for the devices - * - * @returns true on Success, false on failure. - * @param vbox Input IVirtualBox pointer - * @param maxPortPerInst Output array of max port per instance - * @param maxSlotPerPort Output array of max slot per port - * - */ - -static bool vboxGetMaxPortSlotValues(IVirtualBox *vbox, - PRUint32 *maxPortPerInst, - PRUint32 *maxSlotPerPort) -{ - ISystemProperties *sysProps =3D NULL; - - if (!vbox) - return false; - - gVBoxAPI.UIVirtualBox.GetSystemProperties(vbox, &sysProps); - - if (!sysProps) - return false; - - gVBoxAPI.UISystemProperties.GetMaxPortCountForStorageBus(sysProps, - StorageBus_ID= E, - &maxPortPerIn= st[StorageBus_IDE]); - gVBoxAPI.UISystemProperties.GetMaxPortCountForStorageBus(sysProps, - StorageBus_SA= TA, - &maxPortPerIn= st[StorageBus_SATA]); - gVBoxAPI.UISystemProperties.GetMaxPortCountForStorageBus(sysProps, - StorageBus_SC= SI, - &maxPortPerIn= st[StorageBus_SCSI]); - gVBoxAPI.UISystemProperties.GetMaxPortCountForStorageBus(sysProps, - StorageBus_Fl= oppy, - &maxPortPerIn= st[StorageBus_Floppy]); - - gVBoxAPI.UISystemProperties.GetMaxDevicesPerPortForStorageBus(sysProps, - StorageB= us_IDE, - &maxSlot= PerPort[StorageBus_IDE]); - gVBoxAPI.UISystemProperties.GetMaxDevicesPerPortForStorageBus(sysProps, - StorageB= us_SATA, - &maxSlot= PerPort[StorageBus_SATA]); - gVBoxAPI.UISystemProperties.GetMaxDevicesPerPortForStorageBus(sysProps, - StorageB= us_SCSI, - &maxSlot= PerPort[StorageBus_SCSI]); - gVBoxAPI.UISystemProperties.GetMaxDevicesPerPortForStorageBus(sysProps, - StorageB= us_Floppy, - &maxSlot= PerPort[StorageBus_Floppy]); - - VBOX_RELEASE(sysProps); - - return true; -} =20 /** * function to generate the name for medium, @@ -352,57 +297,40 @@ static bool vboxGetMaxPortSlotValues(IVirtualBox *vbo= x, * * @returns null terminated string with device name or NULL * for failures - * @param conn Input Connection Pointer * @param storageBus Input storage bus type - * @param deviceInst Input device instance number * @param devicePort Input port number * @param deviceSlot Input slot number - * @param aMaxPortPerInst Input array of max port per device instance - * @param aMaxSlotPerPort Input array of max slot per device port - * + * @param sdCount Running total of disk devices with "sd" pr= efix */ -static char *vboxGenerateMediumName(PRUint32 storageBus, - PRInt32 deviceInst, - PRInt32 devicePort, - PRInt32 deviceSlot, - PRUint32 *aMaxPortPerInst, - PRUint32 *aMaxSlotPerPort) +static char * +vboxGenerateMediumName(PRUint32 storageBus, + PRInt32 devicePort, + PRInt32 deviceSlot, + size_t sdCount) { const char *prefix =3D NULL; char *name =3D NULL; int total =3D 0; - PRUint32 maxPortPerInst =3D 0; - PRUint32 maxSlotPerPort =3D 0; - - if (!aMaxPortPerInst || - !aMaxSlotPerPort) - return NULL; =20 if ((storageBus < StorageBus_IDE) || - (storageBus > StorageBus_Floppy)) + (storageBus > StorageBus_SAS)) return NULL; =20 - maxPortPerInst =3D aMaxPortPerInst[storageBus]; - maxSlotPerPort =3D aMaxSlotPerPort[storageBus]; - total =3D (deviceInst * maxPortPerInst * maxSlotPerPort) - + (devicePort * maxSlotPerPort) - + deviceSlot; - if (storageBus =3D=3D StorageBus_IDE) { prefix =3D "hd"; - } else if ((storageBus =3D=3D StorageBus_SATA) || - (storageBus =3D=3D StorageBus_SCSI)) { + total =3D devicePort * 2 + deviceSlot; + } else if (storageBus =3D=3D StorageBus_SATA || + storageBus =3D=3D StorageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) { prefix =3D "sd"; + total =3D sdCount; } else if (storageBus =3D=3D StorageBus_Floppy) { + total =3D deviceSlot; prefix =3D "fd"; } =20 name =3D virIndexToDiskName(total, prefix); =20 - VIR_DEBUG("name=3D%s, total=3D%d, storageBus=3D%u, deviceInst=3D%d, " - "devicePort=3D%d deviceSlot=3D%d, maxPortPerInst=3D%u maxSlotPer= Port=3D%u", - NULLSTR(name), total, storageBus, deviceInst, devicePort, - deviceSlot, maxPortPerInst, maxSlotPerPort); return name; } =20 @@ -3270,20 +3198,17 @@ vboxDumpStorageControllers(virDomainDefPtr def, IMa= chine *machine) } =20 =20 -static void -vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr data, IMachine *machine) +static int +vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data, IMachine *machine) { - /* dump IDE hdds if present */ vboxArray mediumAttachments =3D VBOX_ARRAY_INITIALIZER; - bool error =3D false; + size_t sdCount =3D 0, i; int diskCount =3D 0; - size_t i; - PRUint32 maxPortPerInst[StorageBus_Floppy + 1] =3D {}; - PRUint32 maxSlotPerPort[StorageBus_Floppy + 1] =3D {}; + int ret =3D -1; =20 def->ndisks =3D 0; gVBoxAPI.UArray.vboxArrayGet(&mediumAttachments, machine, - gVBoxAPI.UArray.handleMachineGetMediumAtt= achments(machine)); + gVBoxAPI.UArray.handleMachineGetMediumAttachments(machine= )); =20 /* get the number of attachments */ for (i =3D 0; i < mediumAttachments.count; i++) { @@ -3300,24 +3225,19 @@ vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr = data, IMachine *machine) } =20 /* Allocate mem, if fails return error */ - if (VIR_ALLOC_N(def->disks, def->ndisks) >=3D 0) { - for (i =3D 0; i < def->ndisks; i++) { - virDomainDiskDefPtr disk =3D virDomainDiskDefNew(NULL); - if (!disk) { - error =3D true; - break; - } - def->disks[i] =3D disk; - } - } else { - error =3D true; - } + if (VIR_ALLOC_N(def->disks, def->ndisks) < 0) + goto cleanup; =20 - if (!error) - error =3D !vboxGetMaxPortSlotValues(data->vboxObj, maxPortPerInst,= maxSlotPerPort); + for (i =3D 0; i < def->ndisks; i++) { + virDomainDiskDefPtr disk =3D virDomainDiskDefNew(NULL); + if (!disk) + goto cleanup; + + def->disks[i] =3D disk; + } =20 /* get the attachment details here */ - for (i =3D 0; i < mediumAttachments.count && diskCount < def->ndisks &= & !error; i++) { + for (i =3D 0; i < mediumAttachments.count && diskCount < def->ndisks; = i++) { IMediumAttachment *imediumattach =3D mediumAttachments.items[i]; IStorageController *storageController =3D NULL; PRUnichar *storageControllerName =3D NULL; @@ -3327,7 +3247,6 @@ vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) IMedium *medium =3D NULL; PRUnichar *mediumLocUtf16 =3D NULL; char *mediumLocUtf8 =3D NULL; - PRUint32 deviceInst =3D 0; PRInt32 devicePort =3D 0; PRInt32 deviceSlot =3D 0; =20 @@ -3363,16 +3282,36 @@ vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr = data, IMachine *machine) if (!virDomainDiskGetSource(def->disks[diskCount])) { VBOX_RELEASE(medium); VBOX_RELEASE(storageController); - error =3D true; - break; + + goto cleanup; } =20 gVBoxAPI.UIStorageController.GetBus(storageController, &storageBus= ); + gVBoxAPI.UIMediumAttachment.GetPort(imediumattach, &devicePort); + gVBoxAPI.UIMediumAttachment.GetDevice(imediumattach, &deviceSlot); + + def->disks[diskCount]->dst =3D vboxGenerateMediumName(storageBus, + devicePort, + deviceSlot, + sdCount); + if (!def->disks[diskCount]->dst) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not generate medium name for the disk " + "at: port:%d, slot:%d"), devicePort, deviceSl= ot); + VBOX_RELEASE(medium); + VBOX_RELEASE(storageController); + + goto cleanup; + } + if (storageBus =3D=3D StorageBus_IDE) { def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_IDE; } else if (storageBus =3D=3D StorageBus_SATA) { + sdCount++; def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SATA; - } else if (storageBus =3D=3D StorageBus_SCSI) { + } else if (storageBus =3D=3D StorageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) { + sdCount++; def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; } else if (storageBus =3D=3D StorageBus_Floppy) { def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_FDC; @@ -3386,24 +3325,6 @@ vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr d= ata, IMachine *machine) else if (deviceType =3D=3D DeviceType_DVD) def->disks[diskCount]->device =3D VIR_DOMAIN_DISK_DEVICE_CDROM; =20 - gVBoxAPI.UIMediumAttachment.GetPort(imediumattach, &devicePort); - gVBoxAPI.UIMediumAttachment.GetDevice(imediumattach, &deviceSlot); - def->disks[diskCount]->dst =3D vboxGenerateMediumName(storageBus, - deviceInst, - devicePort, - deviceSlot, - maxPortPerInst, - maxSlotPerPort= ); - if (!def->disks[diskCount]->dst) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not generate medium name for the disk " - "at: controller instance:%u, port:%d, slot:%d= "), - deviceInst, devicePort, deviceSlot); - VBOX_RELEASE(medium); - VBOX_RELEASE(storageController); - error =3D true; - break; - } =20 gVBoxAPI.UIMedium.GetReadOnly(medium, &readOnly); if (readOnly =3D=3D PR_TRUE) @@ -3417,15 +3338,20 @@ vboxDumpIDEHDDs(virDomainDefPtr def, vboxDriverPtr = data, IMachine *machine) diskCount++; } =20 + ret =3D 0; + + cleanup: gVBoxAPI.UArray.vboxArrayRelease(&mediumAttachments); =20 /* cleanup on error */ - if (error) { + if (ret < 0) { for (i =3D 0; i < def->ndisks; i++) VIR_FREE(def->disks[i]); VIR_FREE(def->disks); def->ndisks =3D 0; } + + return ret; } =20 static int @@ -4120,7 +4046,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, u= nsigned int flags) if (vboxDumpStorageControllers(def, machine) < 0) goto cleanup; =20 - vboxDumpIDEHDDs(def, data, machine); + if (vboxDumpDisks(def, data, machine) < 0) + goto cleanup; =20 vboxDumpSharedFolders(def, data, machine); vboxDumpNetwork(def, data, machine, networkAdapterCount); @@ -5676,8 +5603,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; @@ -5686,9 +5614,7 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSna= pshotDefPtr def, ISnapshot *snap =3D NULL; IMachine *snapMachine =3D NULL; vboxArray mediumAttachments =3D VBOX_ARRAY_INITIALIZER; - PRUint32 maxPortPerInst[StorageBus_Floppy + 1] =3D {}; - PRUint32 maxSlotPerPort[StorageBus_Floppy + 1] =3D {}; - int diskCount =3D 0; + size_t diskCount =3D 0, sdCount =3D 0; nsresult rc; vboxIID snapIid; char *snapshotUuidStr =3D NULL; @@ -5757,9 +5683,6 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSna= pshotDefPtr def, goto cleanup; } =20 - if (!vboxGetMaxPortSlotValues(data->vboxObj, maxPortPerInst, maxSlotPe= rPort)) - goto cleanup; - /* get the attachment details here */ for (i =3D 0; i < mediumAttachments.count && diskCount < def->ndisks; = i++) { IStorageController *storageController =3D NULL; @@ -5769,7 +5692,6 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSna= pshotDefPtr def, IMedium *disk =3D NULL; PRUnichar *childLocUtf16 =3D NULL; char *childLocUtf8 =3D NULL; - PRUint32 deviceInst =3D 0; PRInt32 devicePort =3D 0; PRInt32 deviceSlot =3D 0; vboxArray children =3D VBOX_ARRAY_INITIALIZER; @@ -5778,26 +5700,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)) { @@ -5820,60 +5788,30 @@ 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, de= vicePort, de= viceSlot, - ma= xPortPerInst, - ma= xSlotPerPort); + sd= Count); } VBOX_UTF8_FREE(diskSnapIdStr); } @@ -5881,10 +5819,16 @@ static int vboxSnapshotGetReadWriteDisks(virDomainS= napshotDefPtr def, VBOX_RELEASE(storageController); VBOX_RELEASE(disk); diskCount++; + + if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Storage= Bus_SCSI || + storageBus =3D=3D StorageBus_SAS) + sdCount++; + } gVBoxAPI.UArray.vboxArrayRelease(&mediumAttachments); =20 ret =3D 0; + cleanup: if (ret < 0) { for (i =3D 0; i < def->ndisks; i++) @@ -5896,9 +5840,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; @@ -5910,10 +5854,7 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPt= r snapshot, IMedium *disk =3D NULL; nsresult rc; vboxArray mediumAttachments =3D VBOX_ARRAY_INITIALIZER; - size_t i =3D 0; - PRUint32 maxPortPerInst[StorageBus_Floppy + 1] =3D {}; - PRUint32 maxSlotPerPort[StorageBus_Floppy + 1] =3D {}; - int diskCount =3D 0; + size_t i =3D 0, diskCount =3D 0, sdCount =3D 0; int ret =3D -1; =20 if (!data->vboxObj) @@ -5976,9 +5917,6 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr= snapshot, goto cleanup; } =20 - if (!vboxGetMaxPortSlotValues(data->vboxObj, maxPortPerInst, maxSlotPe= rPort)) - goto cleanup; - /* get the attachment details here */ for (i =3D 0; i < mediumAttachments.count && diskCount < def->dom->ndi= sks; i++) { PRUnichar *storageControllerName =3D NULL; @@ -5987,7 +5925,6 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr= snapshot, PRBool readOnly =3D PR_FALSE; PRUnichar *mediumLocUtf16 =3D NULL; char *mediumLocUtf8 =3D NULL; - PRUint32 deviceInst =3D 0; PRInt32 devicePort =3D 0; PRInt32 deviceSlot =3D 0; IMediumAttachment *imediumattach =3D mediumAttachments.items[i]; @@ -5996,7 +5933,7 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr= snapshot, rc =3D gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &disk); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get medium")); + _("Cannot get medium")); goto cleanup; } if (!disk) @@ -6004,7 +5941,7 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotPtr= snapshot, 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) @@ -6012,18 +5949,18 @@ 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.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); @@ -6036,14 +5973,48 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotP= tr snapshot, rc =3D gVBoxAPI.UIStorageController.GetBus(storageController, &sto= rageBus); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot get storage controller bus")); + _("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.UIMedium.GetReadOnly(disk, &readOnly); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot get read only attribute")); + goto cleanup; + } + + def->dom->disks[diskCount]->dst =3D vboxGenerateMediumName(storage= Bus, + devicePor= t, + deviceSlo= t, + sdCount); + if (!def->dom->disks[diskCount]->dst) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not generate medium name for the disk " + "at: port:%d, slot:%d"), devicePort, deviceSl= ot); + ret =3D -1; goto cleanup; } + if (storageBus =3D=3D StorageBus_IDE) { def->dom->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_IDE; } else if (storageBus =3D=3D StorageBus_SATA) { + sdCount++; def->dom->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SATA; - } else if (storageBus =3D=3D StorageBus_SCSI) { + } else if (storageBus =3D=3D StorageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) { + sdCount++; def->dom->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; } else if (storageBus =3D=3D StorageBus_Floppy) { def->dom->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_FDC; @@ -6062,46 +6033,15 @@ int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotP= tr 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; - def->dom->disks[diskCount]->dst =3D vboxGenerateMediumName(storage= Bus, - deviceIns= t, - devicePor= t, - deviceSlo= t, - maxPortPe= rInst, - maxSlotPe= rPort); - if (!def->dom->disks[diskCount]->dst) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not generate medium name for the disk " - "at: controller instance:%u, port:%d, slot:%d= "), - deviceInst, devicePort, deviceSlot); - ret =3D -1; - goto cleanup; - } - diskCount ++; + + diskCount++; } - /* cleanup on error */ =20 ret =3D 0; + cleanup: if (ret < 0) { for (i =3D 0; i < def->dom->ndisks; i++) --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 1508873778252899.8027518972577; Tue, 24 Oct 2017 12:36:18 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AE60C7EAA1; Tue, 24 Oct 2017 19:36:16 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8C7545C462; Tue, 24 Oct 2017 19:36:16 +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 DD1F81805966; Tue, 24 Oct 2017 19:36:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9OJZlgq009750 for ; Tue, 24 Oct 2017 15:35:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id ECE3A60F9D; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: from mx1.redhat.com (ext-mx07.extmail.prod.ext.phx2.redhat.com [10.5.110.31]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E5BDD60F8B for ; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) (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 B523FC04AC59 for ; Tue, 24 Oct 2017 19:35:46 +0000 (UTC) Received: by mail-qt0-f195.google.com with SMTP id 1so31962026qtn.3 for ; Tue, 24 Oct 2017 12:35:46 -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 AE60C7EAA1 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx04.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 AE60C7EAA1 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="yX+2Luog" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B523FC04AC59 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B523FC04AC59 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=9TMat4WLyJnwWFA4v3iXtH8gjouUufkdwyWf1zdZGb0=; b=yX+2LuoguEr/bpnbWXIYg+iOeYhdEf6hvc/hYEJgvTDXnL9fNf6q/oSxIQh1g7nO2f mSrraxiUIJqlAUEJpBZctleR/L4w3yF0LzhWGXuWz2XojHeu8n1aDxRGH92zSkDFGV+l CwFA65hEhyUUr1fyipY3VMh9/5bJyuyl6LyWRHbxA4UEdeJ60CdaeHI31wJODtBSOQX4 WwDr2xnBI5Dqfm6uXUy7ba7LbvlR9vkjP1VGBE9NSsdWE0i9zqLGU4B7Cr/Tf46Oy/NG gN6G3xoothBkhJrxRjp2xDcZdARl4Hc3lisBCPDRhiIYvecN9Gtf7JTyK4e8NaEDsdQL moDw== 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=9TMat4WLyJnwWFA4v3iXtH8gjouUufkdwyWf1zdZGb0=; b=rWYxddnE3BveVxSckosxnnH+HgrBPoSuiNOxvtgrSbtdNnbKpbWugh9HvmdUb5YrXO m3vjpNyqSbOrMMmGdmjfx32iwuAUZLKwMHdkQ3oCUH3Mk1YGDE3DF3o0W+dRxle7i93k BGVCt55tloUGaWiS+jFqnER8TnkpmIn+aPjCbD2XF3QQ9IjkXwmDJoISwAMrWWlYMqXo a8yaxXnbxRMFnkSkkMxhlMzI1LqpWnfnUDGC6oKu/1h2c6OnbmZVxFj0P5eNOzUKQ6ff oOQieIKqWJ+xumObjfoBbp601jkpksCBIXjUy+VWtnxLNh3XBTOZGG2oCAB+iNKantb0 pfGQ== X-Gm-Message-State: AMCzsaU/NjwKWgUz1EqSMXdnkS0h8+4PSPXHMEvzT1JYtlfjq2doSmAI CTCW2aMI+kEhh2zxNtvh/BkXLItH5no= X-Google-Smtp-Source: ABhQp+QNfA9B8slIINFtzvlSZr62ZWWATP7F2ZGjnShYJyCEgiDp3ELn0j/QZBSxyWq9Cl1CtVr5gg== X-Received: by 10.200.38.225 with SMTP id 30mr28378602qtp.334.1508873745615; Tue, 24 Oct 2017 12:35:45 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:36 -0400 Message-Id: <20171024193538.9078-14-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.31]); Tue, 24 Oct 2017 19:35:47 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 Oct 2017 19:35:47 +0000 (UTC) for IP:'209.85.216.195' DOMAIN:'mail-qt0-f195.google.com' HELO:'mail-qt0-f195.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.195 mail-qt0-f195.google.com 209.85.216.195 mail-qt0-f195.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.31 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 13/15] vbox: Cleanup vboxDumpDisks implementation 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 24 Oct 2017 19:36:17 +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" Primer the code for further changes: * move variable declarations to the top of the function * group together free/release statements * error check and report VBOX API calls used Reviewed-by: John Ferlan --- src/vbox/vbox_common.c | 188 +++++++++++++++++++++++++++++++--------------= ---- 1 file changed, 120 insertions(+), 68 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 9dc36a1b2..ee6421aae 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3202,6 +3202,16 @@ static int vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data, IMachine *machine) { vboxArray mediumAttachments =3D VBOX_ARRAY_INITIALIZER; + IMediumAttachment *mediumAttachment =3D NULL; + IMedium *medium =3D NULL; + IStorageController *controller =3D NULL; + PRUnichar *controllerName =3D NULL, *mediumLocUtf16 =3D NULL; + PRUint32 deviceType, storageBus; + PRInt32 devicePort, deviceSlot; + PRBool readOnly; + nsresult rc; + virDomainDiskDefPtr disk =3D NULL; + char *mediumLocUtf8 =3D NULL; size_t sdCount =3D 0, i; int diskCount =3D 0; int ret =3D -1; @@ -3212,15 +3222,14 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) =20 /* get the number of attachments */ for (i =3D 0; i < mediumAttachments.count; i++) { - IMediumAttachment *imediumattach =3D mediumAttachments.items[i]; - if (imediumattach) { - IMedium *medium =3D NULL; + mediumAttachment =3D mediumAttachments.items[i]; + if (!mediumAttachment) + continue; =20 - gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &medium); - if (medium) { - def->ndisks++; - VBOX_RELEASE(medium); - } + gVBoxAPI.UIMediumAttachment.GetMedium(mediumAttachment, &medium); + if (medium) { + def->ndisks++; + VBOX_RELEASE(medium); } } =20 @@ -3229,7 +3238,7 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) goto cleanup; =20 for (i =3D 0; i < def->ndisks; i++) { - virDomainDiskDefPtr disk =3D virDomainDiskDefNew(NULL); + disk =3D virDomainDiskDefNew(NULL); if (!disk) goto cleanup; =20 @@ -3238,104 +3247,141 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr = data, IMachine *machine) =20 /* get the attachment details here */ for (i =3D 0; i < mediumAttachments.count && diskCount < def->ndisks; = i++) { - IMediumAttachment *imediumattach =3D mediumAttachments.items[i]; - IStorageController *storageController =3D NULL; - PRUnichar *storageControllerName =3D NULL; - PRUint32 deviceType =3D DeviceType_Null; - PRUint32 storageBus =3D StorageBus_Null; - PRBool readOnly =3D PR_FALSE; - IMedium *medium =3D NULL; - PRUnichar *mediumLocUtf16 =3D NULL; - char *mediumLocUtf8 =3D NULL; - PRInt32 devicePort =3D 0; - PRInt32 deviceSlot =3D 0; - - if (!imediumattach) + mediumAttachment =3D mediumAttachments.items[i]; + controller =3D NULL; + controllerName =3D NULL; + deviceType =3D DeviceType_Null; + storageBus =3D StorageBus_Null; + readOnly =3D PR_FALSE; + medium =3D NULL; + mediumLocUtf16 =3D NULL; + mediumLocUtf8 =3D NULL; + devicePort =3D 0; + deviceSlot =3D 0; + disk =3D def->disks[diskCount]; + + if (!mediumAttachment) continue; =20 - gVBoxAPI.UIMediumAttachment.GetMedium(imediumattach, &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; + } + if (!medium) continue; =20 - gVBoxAPI.UIMediumAttachment.GetController(imediumattach, &storageC= ontrollerName); - if (!storageControllerName) { - VBOX_RELEASE(medium); - continue; + rc =3D gVBoxAPI.UIMediumAttachment.GetController(mediumAttachment, + &controllerName); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to get storage controller name, rc=3D= %08x"), + rc); + goto cleanup; } =20 - gVBoxAPI.UIMachine.GetStorageControllerByName(machine, - storageControllerNam= e, - &storageController); - VBOX_UTF16_FREE(storageControllerName); - if (!storageController) { - VBOX_RELEASE(medium); - continue; + rc =3D gVBoxAPI.UIMachine.GetStorageControllerByName(machine, + controllerName, + &controller); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get storage controller by name, rc= =3D%08x"), + rc); + goto cleanup; + } + + 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; } =20 - gVBoxAPI.UIMedium.GetLocation(medium, &mediumLocUtf16); VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8); - VBOX_UTF16_FREE(mediumLocUtf16); - ignore_value(virDomainDiskSetSource(def->disks[diskCount], - mediumLocUtf8)); - VBOX_UTF8_FREE(mediumLocUtf8); =20 - if (!virDomainDiskGetSource(def->disks[diskCount])) { - VBOX_RELEASE(medium); - VBOX_RELEASE(storageController); + if (virDomainDiskSetSource(disk, mediumLocUtf8) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not set disk source")); + goto cleanup; + } =20 + rc =3D gVBoxAPI.UIMediumAttachment.GetType(mediumAttachment, &devi= ceType); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get device type, rc=3D%08x"), rc); + goto cleanup; + } + rc =3D gVBoxAPI.UIMediumAttachment.GetPort(mediumAttachment, &devi= cePort); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get device port, rc=3D%08x"), rc); + goto cleanup; + } + rc =3D gVBoxAPI.UIMediumAttachment.GetDevice(mediumAttachment, &de= viceSlot); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get device slot, rc=3D%08x"), rc); + goto cleanup; + } + rc =3D gVBoxAPI.UIStorageController.GetBus(controller, &storageBus= ); + if (NS_FAILED(rc)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not get storage controller bus, rc=3D%= 08x"), + 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; } =20 - gVBoxAPI.UIStorageController.GetBus(storageController, &storageBus= ); - gVBoxAPI.UIMediumAttachment.GetPort(imediumattach, &devicePort); - gVBoxAPI.UIMediumAttachment.GetDevice(imediumattach, &deviceSlot); + disk->dst =3D vboxGenerateMediumName(storageBus, devicePort, devic= eSlot, + sdCount); =20 - def->disks[diskCount]->dst =3D vboxGenerateMediumName(storageBus, - devicePort, - deviceSlot, - sdCount); - if (!def->disks[diskCount]->dst) { + if (!disk->dst) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Could not generate medium name for the disk " "at: port:%d, slot:%d"), devicePort, deviceSl= ot); - VBOX_RELEASE(medium); - VBOX_RELEASE(storageController); - goto cleanup; } =20 if (storageBus =3D=3D StorageBus_IDE) { - def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_IDE; + disk->bus =3D VIR_DOMAIN_DISK_BUS_IDE; } else if (storageBus =3D=3D StorageBus_SATA) { sdCount++; - def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SATA; + disk->bus =3D VIR_DOMAIN_DISK_BUS_SATA; } else if (storageBus =3D=3D StorageBus_SCSI || storageBus =3D=3D StorageBus_SAS) { sdCount++; - def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; + disk->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; } else if (storageBus =3D=3D StorageBus_Floppy) { - def->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_FDC; + disk->bus =3D VIR_DOMAIN_DISK_BUS_FDC; } =20 - gVBoxAPI.UIMediumAttachment.GetType(imediumattach, &deviceType); if (deviceType =3D=3D DeviceType_HardDisk) - def->disks[diskCount]->device =3D VIR_DOMAIN_DISK_DEVICE_DISK; + disk->device =3D VIR_DOMAIN_DISK_DEVICE_DISK; else if (deviceType =3D=3D DeviceType_Floppy) - def->disks[diskCount]->device =3D VIR_DOMAIN_DISK_DEVICE_FLOPP= Y; + disk->device =3D VIR_DOMAIN_DISK_DEVICE_FLOPPY; else if (deviceType =3D=3D DeviceType_DVD) - def->disks[diskCount]->device =3D VIR_DOMAIN_DISK_DEVICE_CDROM; + disk->device =3D VIR_DOMAIN_DISK_DEVICE_CDROM; =20 - - gVBoxAPI.UIMedium.GetReadOnly(medium, &readOnly); if (readOnly =3D=3D PR_TRUE) - def->disks[diskCount]->src->readonly =3D true; + disk->src->readonly =3D true; =20 - virDomainDiskSetType(def->disks[diskCount], - VIR_STORAGE_TYPE_FILE); + virDomainDiskSetType(disk, VIR_STORAGE_TYPE_FILE); =20 - VBOX_RELEASE(medium); - VBOX_RELEASE(storageController); diskCount++; + + VBOX_UTF16_FREE(controllerName); + VBOX_UTF8_FREE(mediumLocUtf8); + VBOX_UTF16_FREE(mediumLocUtf16); + VBOX_RELEASE(medium); + VBOX_RELEASE(controller); } =20 ret =3D 0; @@ -3345,6 +3391,12 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr dat= a, IMachine *machine) =20 /* cleanup on error */ if (ret < 0) { + VBOX_UTF16_FREE(controllerName); + VBOX_UTF8_FREE(mediumLocUtf8); + VBOX_UTF16_FREE(mediumLocUtf16); + VBOX_RELEASE(medium); + VBOX_RELEASE(controller); + for (i =3D 0; i < def->ndisks; i++) VIR_FREE(def->disks[i]); VIR_FREE(def->disks); --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 10:06:21 2024 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 From nobody Sun May 5 10:06:21 2024 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 1508873777920742.4421909370205; Tue, 24 Oct 2017 12:36:17 -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 6A1A568AB; Tue, 24 Oct 2017 19:36:16 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3D21C17AF6; Tue, 24 Oct 2017 19:36:16 +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 CDF7B1805967; Tue, 24 Oct 2017 19:36:13 +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 v9OJZpVm009783 for ; Tue, 24 Oct 2017 15:35:51 -0400 Received: by smtp.corp.redhat.com (Postfix) id 49BEC6031E; Tue, 24 Oct 2017 19:35:51 +0000 (UTC) Received: from mx1.redhat.com (ext-mx10.extmail.prod.ext.phx2.redhat.com [10.5.110.39]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 447D16017B for ; Tue, 24 Oct 2017 19:35:51 +0000 (UTC) Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) (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 C39FE5F7AC for ; Tue, 24 Oct 2017 19:35:47 +0000 (UTC) Received: by mail-qk0-f195.google.com with SMTP id l194so27726882qke.13 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.46 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Oct 2017 12:35:46 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6A1A568AB Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx09.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 6A1A568AB 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="IXmyBjm9" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C39FE5F7AC Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C39FE5F7AC 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=a/sh+Zl8GeT4H6CQzSYXxrklrvPBzxvm29teO4N8GTE=; b=IXmyBjm9VnENm0auM9RReimHbqOLnZu/oHFFKnFfMELgDpNlY99LcLqAx3vbjMVA0A lbccwem4bM0UYLqrKM0EXC2M2Geg3ax8TExm5ppo64evBrzEGevygcfMNsdAtO+e5Hoz KckMiUhvFHi5fBgZThjid9+wpf96ZAaktSO4U8Zw/AFGQrpX0/76QUL3kq8M2HB40vsR SD+j0UIZ9JFSSAAsd/YAmChtPYx9tTmAEYM5fTzheEX4Lq87blaSXmUYHLud/yl3iQZe N3BIArB+g3JnZOaUi/IVoYQO/F/pY8Tku6DJ0wcP4ZNYlhf4sWdJWEiEPyiIDjjuh2BX xzlA== 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=a/sh+Zl8GeT4H6CQzSYXxrklrvPBzxvm29teO4N8GTE=; b=Muktr2GuhosXxelRMJGQOC89ps/JJXXQf4aSfPeu50HMt72Woq9GnfTczuC7+4iGKP p8ojxFJ/YwRQfSow/1RPfbaSUqCx+f1isiJeSeLhzC8E7KmnYy0kPOI26wOQuVrNDWng sNWQFe+Rg6B/0JcyOOGaPNzgkLOWw6DOtbgg7eTSyi45BqwHnDev6RpFZkg343D+Sag2 2k/4LPFl4WowIDB7OEfLNW0BYpthdFAfGI2pb9OkhiAP40QQDqVeOPwB/0tMlj73SPMB fqtQv8CV3luJEsccWEK3XBk1zeBUUSJES3+wvnHMAwidKkcw9xUJptpirflfVIcxWpJq X3Zw== X-Gm-Message-State: AMCzsaUEod0eN5s+bKwszh89hrIP4qWQPPxfSaAIVY2plOEM7KrmqYto +fTVrX4+GPY5q5VcVnlKZhnUAIR7nSQ= X-Google-Smtp-Source: ABhQp+RauRVtL0Wa9/CH/TCujBMdQrSKEsNQc6UwqJe6oTkIlB/D6cnL7PcIJNq9oHViHSTTpSRBdQ== X-Received: by 10.55.158.78 with SMTP id h75mr23962905qke.355.1508873746822; Tue, 24 Oct 2017 12:35:46 -0700 (PDT) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 24 Oct 2017 15:35:38 -0400 Message-Id: <20171024193538.9078-16-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.39]); Tue, 24 Oct 2017 19:35:48 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 24 Oct 2017 19:35:48 +0000 (UTC) for IP:'209.85.220.195' DOMAIN:'mail-qk0-f195.google.com' HELO:'mail-qk0-f195.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.220.195 mail-qk0-f195.google.com 209.85.220.195 mail-qk0-f195.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.39 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 15/15] vbox: Generate disk address element 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.38]); Tue, 24 Oct 2017 19:36:16 +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 adds

element to each device since device names alone won't adequately reflect the storage device layout in the VM. With this patch, the ouput produced by dumpxml will faithfully reproduce the storage layout of the VM if used with define. --- src/vbox/vbox_common.c | 79 +++++++++++++++++++++++++++++++++++++++++++---= ---- 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index d1d8804c7..95d35631f 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3211,8 +3211,9 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr data= , IMachine *machine) PRBool readOnly; nsresult rc; virDomainDiskDefPtr disk =3D NULL; + virDomainControllerDefPtr ctrl =3D NULL; char *mediumLocUtf8 =3D NULL; - size_t sdCount =3D 0, i; + size_t sdCount =3D 0, i, j; int ret =3D -1; =20 def->ndisks =3D 0; @@ -3353,26 +3354,83 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) goto cleanup; } =20 - if (storageBus =3D=3D StorageBus_IDE) { + disk->info.type =3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE; + disk->info.addr.drive.bus =3D 0; + disk->info.addr.drive.unit =3D devicePort; + + switch ((enum StorageBus) storageBus) { + case StorageBus_IDE: disk->bus =3D VIR_DOMAIN_DISK_BUS_IDE; - } else if (storageBus =3D=3D StorageBus_SATA) { - sdCount++; + disk->info.addr.drive.bus =3D devicePort; /* primary, secondar= y */ + disk->info.addr.drive.unit =3D deviceSlot; /* master, slave */ + + break; + case StorageBus_SATA: disk->bus =3D VIR_DOMAIN_DISK_BUS_SATA; - } else if (storageBus =3D=3D StorageBus_SCSI || - storageBus =3D=3D StorageBus_SAS) { sdCount++; + + break; + case StorageBus_SCSI: + case StorageBus_SAS: disk->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; - } else if (storageBus =3D=3D StorageBus_Floppy) { + sdCount++; + + /* In vbox, if there's a disk attached to SAS controller, ther= e will + * be libvirt SCSI controller present with model "lsi1068", an= d we + * need to find its index + */ + for (j =3D 0; j < def->ncontrollers; j++) { + ctrl =3D def->controllers[j]; + + if (ctrl->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI) + continue; + + if (storageBus =3D=3D StorageBus_SAS && + ctrl->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LS= ISAS1068) { + disk->info.addr.drive.controller =3D ctrl->idx; + break; + } + + if (storageBus =3D=3D StorageBus_SCSI && + ctrl->model !=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSIS= AS1068) { + disk->info.addr.drive.controller =3D ctrl->idx; + break; + } + } + + break; + case StorageBus_Floppy: disk->bus =3D VIR_DOMAIN_DISK_BUS_FDC; + + break; + case StorageBus_Null: + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unsupported null storage bus")); + goto cleanup; } =20 - if (deviceType =3D=3D DeviceType_HardDisk) + switch ((enum DeviceType) deviceType) { + case DeviceType_HardDisk: disk->device =3D VIR_DOMAIN_DISK_DEVICE_DISK; - else if (deviceType =3D=3D DeviceType_Floppy) + + break; + case DeviceType_Floppy: disk->device =3D VIR_DOMAIN_DISK_DEVICE_FLOPPY; - else if (deviceType =3D=3D DeviceType_DVD) + + break; + case DeviceType_DVD: disk->device =3D VIR_DOMAIN_DISK_DEVICE_CDROM; =20 + break; + case DeviceType_Network: + case DeviceType_USB: + case DeviceType_SharedFolder: + case DeviceType_Null: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unsupported vbox device type: %d"), deviceTy= pe); + goto cleanup; + } + if (readOnly =3D=3D PR_TRUE) disk->src->readonly =3D true; =20 @@ -4098,7 +4156,6 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, u= nsigned int flags) goto cleanup; if (vboxDumpStorageControllers(def, machine) < 0) goto cleanup; - if (vboxDumpDisks(def, data, machine) < 0) goto cleanup; =20 --=20 2.14.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list