From nobody Wed May 14 20:45:03 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1519309322821887.8733583679975; Thu, 22 Feb 2018 06:22:02 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37D0328211; Thu, 22 Feb 2018 14:22:01 +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 D273C608FA; Thu, 22 Feb 2018 14:22:00 +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 67C0618033EA; Thu, 22 Feb 2018 14:21:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1MELvU9002098 for ; Thu, 22 Feb 2018 09:21:57 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9EC80217B409; Thu, 22 Feb 2018 14:21:57 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7CB2E217B400 for ; Thu, 22 Feb 2018 14:21:57 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 8505D101762; Thu, 22 Feb 2018 15:21:56 +0100 (CET) From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 22 Feb 2018 15:21:55 +0100 Message-Id: <692e18987d7b29bd3317671f50917614524648cc.1519309259.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/3] qemu: Fix updating device with boot order 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.30]); Thu, 22 Feb 2018 14:22:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Commit v3.7.0-14-gc57f3fd2f8 prevented adding a element to an inactive domain with global element. However, as a result of that change updating any device with boot order would fail with 'boot order X is already used by another device', where "another device" is in fact the device which is being updated. To fix this we have to ignore the device which we're about to update when checking for boot order conflicts. https://bugzilla.redhat.com/show_bug.cgi?id=3D1546971 Signed-off-by: Jiri Denemark --- src/conf/domain_conf.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c71c28e8d2..d96b012b98 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27381,18 +27381,30 @@ virDomainDeviceIsUSB(virDomainDeviceDefPtr dev) return false; } =20 + +typedef struct _virDomainCompatibleDeviceData virDomainCompatibleDeviceDat= a; +typedef virDomainCompatibleDeviceData *virDomainCompatibleDeviceDataPtr; +struct _virDomainCompatibleDeviceData { + virDomainDeviceInfoPtr newInfo; + virDomainDeviceInfoPtr oldInfo; +}; + static int virDomainDeviceInfoCheckBootIndex(virDomainDefPtr def ATTRIBUTE_UNUSED, virDomainDeviceDefPtr device ATTRIBUTE_U= NUSED, virDomainDeviceInfoPtr info, void *opaque) { - virDomainDeviceInfoPtr newinfo =3D opaque; + virDomainCompatibleDeviceDataPtr data =3D opaque; =20 - if (info->bootIndex =3D=3D newinfo->bootIndex) { + /* Ignore the device we're about to update */ + if (data->oldInfo =3D=3D info) + return 0; + + if (info->bootIndex =3D=3D data->newInfo->bootIndex) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("boot order %u is already used by another device"= ), - newinfo->bootIndex); + data->newInfo->bootIndex); return -1; } return 0; @@ -27401,9 +27413,12 @@ virDomainDeviceInfoCheckBootIndex(virDomainDefPtr = def ATTRIBUTE_UNUSED, int virDomainDefCompatibleDevice(virDomainDefPtr def, virDomainDeviceDefPtr dev, - virDomainDeviceDefPtr oldDev ATTRIBUTE_UNUSED) + virDomainDeviceDefPtr oldDev) { - virDomainDeviceInfoPtr info =3D virDomainDeviceGetInfo(dev); + virDomainCompatibleDeviceData data =3D { + .newInfo =3D virDomainDeviceGetInfo(dev), + .oldInfo =3D virDomainDeviceGetInfo(oldDev), + }; =20 if (!virDomainDefHasUSB(def) && def->os.type !=3D VIR_DOMAIN_OSTYPE_EXE && @@ -27414,7 +27429,7 @@ virDomainDefCompatibleDevice(virDomainDefPtr def, return -1; } =20 - if (info && info->bootIndex > 0) { + if (data.newInfo && data.newInfo->bootIndex > 0) { if (def->os.nBootDevs > 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("per-device boot elements cannot be used" @@ -27423,7 +27438,7 @@ virDomainDefCompatibleDevice(virDomainDefPtr def, } if (virDomainDeviceInfoIterate(def, virDomainDeviceInfoCheckBootIndex, - info) < 0) + &data) < 0) return -1; } =20 --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list