From nobody Mon Sep 16 19:10:29 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1721395618635741.3334850757236; Fri, 19 Jul 2024 06:26:58 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 888019D5; Fri, 19 Jul 2024 09:26:57 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 9508E9E5; Fri, 19 Jul 2024 09:26:35 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E5F049E1; Fri, 19 Jul 2024 09:26:32 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5FFE29D5 for ; Fri, 19 Jul 2024 09:26:32 -0400 (EDT) Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-264-XGgZl583PiigYyzRO1ngQQ-1; Fri, 19 Jul 2024 09:26:30 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EA13B19792F0 for ; Fri, 19 Jul 2024 13:26:03 +0000 (UTC) Received: from ajulis-thinkpadt14gen4.remote.csb (unknown [10.43.2.246]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3C3491955E7F for ; Fri, 19 Jul 2024 13:26:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1721395592; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=eV8pxbKKoS1HiQkys2ygm6cLnMzUkvnYiK32S5wObEY=; b=ZqL6up0w3cO8jMCjTm+8KR/uHjvK52FpqvShIUVscMf+wixMKKragwl0LoCGoRmG/hE1K+ HgIu4/Gw+ZbeLe+Dda3UQ6T0eL9UHRc+F/5IYMGQcqrlKCIwEpLuTTEsXS3szvJ/CipB8/ zQAEDP3Cfpkr4mv/PUMuW/swnLQ4jTA= X-MC-Unique: XGgZl583PiigYyzRO1ngQQ-1 From: Adam Julis To: devel@lists.libvirt.org Subject: [PATCH] vmx: Ensure unique disk targets when parsing Date: Fri, 19 Jul 2024 15:25:59 +0200 Message-ID: <68c55e7295c504ceb7d80bb364d26cf26f9cf2c1.1721395550.git.ajulis@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: KLIBFHEZ2NOAMYKQIWLW5XDKW5FHD5JY X-Message-ID-Hash: KLIBFHEZ2NOAMYKQIWLW5XDKW5FHD5JY X-MailFrom: ajulis@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1721395619782116600 Content-Type: text/plain; charset="utf-8"; x-default="true" Disk targets were generated in virVMXParseConfig() with virVMXGenerateDiskTarget(). It works on combination of controller, fix offset, unit and prefix. While SCSI and SATA have same prefix "sd", function virVMXGenerateDiskTarget() could returned in some cases same targets. In this patch, after loaded SCSI and SATA disks to the def, it checks if in array exists any SATA disks after SCSI. If not, nothing happened. If yes, targets of all SATA disks are changed. Disk target is calculated as: last SCSI target value + n, where n is position of disk in array after last SCSI (1,2,..). Because assigned addresses of disks are generated from their indexes, for every changed SATA disk is called virDomainDiskDefAssignAddress() with the updated value. The corresponding tests have been modified to match the index changes. Signed-off-by: Adam Julis --- src/vmx/vmx.c | 32 ++++++++++++++++++++++++ tests/vmx2xmldata/esx-in-the-wild-12.xml | 4 +-- tests/vmx2xmldata/esx-in-the-wild-8.xml | 4 +-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 227744d062..9fdf0f1cd4 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -1389,6 +1389,9 @@ virVMXParseConfig(virVMXContext *ctx, bool smbios_reflecthost =3D false; int controller; int bus; + int ndisk; + int last_scsi; + int offset =3D -1; int port; bool present; int scsi_virtualDev[4] =3D { -1, -1, -1, -1 }; @@ -1805,6 +1808,35 @@ virVMXParseConfig(virVMXContext *ctx, } } =20 + /* now disks contain only SCSI and SATA, SATA could have same index (d= st) as SCSI + * find last SCSI index in array and use it as offset for all SATA ind= exes + * (overwrite old values) + * finally, regenerate correct addresses, while it depends on the inde= x */ + for (ndisk =3D 0; ndisk < def->ndisks; ndisk++) { + virDomainDiskDef *dsc =3D def->disks[ndisk]; + + if (dsc->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI) { + offset =3D virDiskNameToIndex(dsc->dst); + last_scsi =3D ndisk; + continue; + } + + if (offset > -1) { + VIR_FREE(def->disks[ndisk]->dst); + def->disks[ndisk]->dst =3D virIndexToDiskName(offset + ndisk -= last_scsi, "sd"); + + if (virDomainDiskDefAssignAddress(NULL, def->disks[ndisk], def= ) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Could not assign address to disk '%1$s'"= ), + virDomainDiskGetSource(dsc)); + goto cleanup; + } + } + + else + break; + } + /* def:disks (ide) */ for (bus =3D 0; bus < 2; ++bus) { for (unit =3D 0; unit < 2; ++unit) { diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml b/tests/vmx2xmldata/e= sx-in-the-wild-12.xml index 42184501d0..a7730845ee 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-12.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml @@ -21,9 +21,9 @@
- + -
+
diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml b/tests/vmx2xmldata/es= x-in-the-wild-8.xml index 47d22ced2a..d5356bda34 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-8.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml @@ -36,9 +36,9 @@ - + -
+
--=20 2.45.2