From nobody Mon Feb 9 14:00:04 2026 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 1538741688980172.91991161990643; Fri, 5 Oct 2018 05:14:48 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 952063091D54; Fri, 5 Oct 2018 12:14:46 +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 54CBD30918A2; Fri, 5 Oct 2018 12:14:46 +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 F1FEF180BAE4; Fri, 5 Oct 2018 12:14:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w95CENaU017548 for ; Fri, 5 Oct 2018 08:14:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id 460C9341E1; Fri, 5 Oct 2018 12:14:23 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 930F63416C; Fri, 5 Oct 2018 12:14:22 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Fri, 5 Oct 2018 14:14:05 +0200 Message-Id: <31f1553cf6274d15bcb1a408ba8283124f45784c.1538741517.git.pkrempa@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH v2 06/12] qemu: hotplug: Allow specifying explicit source for disk backend hotplug code 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.84 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Fri, 05 Oct 2018 12:14:47 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Since the code is also used when changing media we need to allow specifying explicit source for which we are going to prepare. With this change callers don't have to replace disk->src with the new source definition for generating these. Signed-off-by: Peter Krempa --- src/qemu/qemu_hotplug.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 8123c12a26..f9a9778fb2 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -458,6 +458,7 @@ qemuHotplugRemoveStorageSourcePrepareData(virStorageSou= rcePtr src, static qemuHotplugDiskSourceDataPtr qemuHotplugDiskSourceRemovePrepare(virDomainDiskDefPtr disk, + virStorageSourcePtr src, virQEMUCapsPtr qemuCaps) { qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); @@ -474,7 +475,7 @@ qemuHotplugDiskSourceRemovePrepare(virDomainDiskDefPtr = disk, if (VIR_STRDUP(data->corAlias, diskPriv->nodeCopyOnRead) < 0) goto cleanup; - for (n =3D disk->src; virStorageSourceIsBacking(n); n =3D n->backi= ngStore) { + for (n =3D src; virStorageSourceIsBacking(n); n =3D n->backingStor= e) { if (!(backend =3D qemuHotplugRemoveStorageSourcePrepareData(n,= NULL))) goto cleanup; @@ -485,7 +486,7 @@ qemuHotplugDiskSourceRemovePrepare(virDomainDiskDefPtr = disk, if (!(drivealias =3D qemuAliasDiskDriveFromDisk(disk))) goto cleanup; - if (!(backend =3D qemuHotplugRemoveStorageSourcePrepareData(disk->= src, + if (!(backend =3D qemuHotplugRemoveStorageSourcePrepareData(src, driveali= as))) goto cleanup; @@ -505,6 +506,7 @@ qemuHotplugDiskSourceRemovePrepare(virDomainDiskDefPtr = disk, /** * qemuHotplugDiskSourceAttachPrepare: * @disk: disk to generate attachment data for + * @src: disk source to prepare attachment * @qemuCaps: capabilities of the qemu process * * Prepares and returns qemuHotplugDiskSourceData structure filled with al= l data @@ -512,11 +514,13 @@ qemuHotplugDiskSourceRemovePrepare(virDomainDiskDefPt= r disk, */ static qemuHotplugDiskSourceDataPtr qemuHotplugDiskSourceAttachPrepare(virDomainDiskDefPtr disk, + virStorageSourcePtr src, virQEMUCapsPtr qemuCaps) { qemuBlockStorageSourceAttachDataPtr backend =3D NULL; qemuHotplugDiskSourceDataPtr data; qemuHotplugDiskSourceDataPtr ret =3D NULL; + virStorageSourcePtr savesrc =3D NULL; virStorageSourcePtr n; if (VIR_ALLOC(data) < 0) @@ -527,7 +531,7 @@ qemuHotplugDiskSourceAttachPrepare(virDomainDiskDefPtr = disk, !(data->corProps =3D qemuBlockStorageGetCopyOnReadProps(disk))) goto cleanup; - for (n =3D disk->src; virStorageSourceIsBacking(n); n =3D n->backi= ngStore) { + for (n =3D src; virStorageSourceIsBacking(n); n =3D n->backingStor= e) { if (!(backend =3D qemuBlockStorageSourceAttachPrepareBlockdev(= n))) goto cleanup; @@ -538,10 +542,15 @@ qemuHotplugDiskSourceAttachPrepare(virDomainDiskDefPt= r disk, goto cleanup; } } else { + VIR_STEAL_PTR(savesrc, disk->src); + disk->src =3D src; + if (!(backend =3D qemuBuildStorageSourceAttachPrepareDrive(disk, q= emuCaps))) goto cleanup; - if (qemuBuildStorageSourceAttachPrepareCommon(disk->src, backend, = qemuCaps) < 0) + VIR_STEAL_PTR(disk->src, savesrc); + + if (qemuBuildStorageSourceAttachPrepareCommon(src, backend, qemuCa= ps) < 0) goto cleanup; if (VIR_APPEND_ELEMENT(data->backends, data->nbackends, backend) <= 0) @@ -551,6 +560,9 @@ qemuHotplugDiskSourceAttachPrepare(virDomainDiskDefPtr = disk, VIR_STEAL_PTR(ret, data); cleanup: + if (savesrc) + VIR_STEAL_PTR(disk->src, savesrc); + qemuBlockStorageSourceAttachDataFree(backend); qemuHotplugDiskSourceDataFree(data); return ret; @@ -640,12 +652,13 @@ qemuDomainChangeMediaBlockdev(virQEMUDriverPtr driver, int ret =3D -1; if (!virStorageSourceIsEmpty(disk->src) && - !(oldbackend =3D qemuHotplugDiskSourceRemovePrepare(disk, priv->qe= muCaps))) + !(oldbackend =3D qemuHotplugDiskSourceRemovePrepare(disk, disk->sr= c, + priv->qemuCaps))) goto cleanup; disk->src =3D newsrc; if (!virStorageSourceIsEmpty(disk->src)) { - if (!(newbackend =3D qemuHotplugDiskSourceAttachPrepare(disk, + if (!(newbackend =3D qemuHotplugDiskSourceAttachPrepare(disk, disk= ->src, priv->qemuCa= ps))) goto cleanup; @@ -782,7 +795,8 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) goto error; - if (!(diskdata =3D qemuHotplugDiskSourceAttachPrepare(disk, priv->qemu= Caps))) + if (!(diskdata =3D qemuHotplugDiskSourceAttachPrepare(disk, disk->src, + priv->qemuCaps))) goto error; if (!(devstr =3D qemuBuildDiskDeviceStr(vm->def, disk, 0, priv->qemuCa= ps))) @@ -4159,7 +4173,8 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, VIR_DEBUG("Removing disk %s from domain %p %s", disk->info.alias, vm, vm->def->name); - if (!(diskbackend =3D qemuHotplugDiskSourceRemovePrepare(disk, priv->q= emuCaps))) + if (!(diskbackend =3D qemuHotplugDiskSourceRemovePrepare(disk, disk->s= rc, + priv->qemuCaps)= )) return -1; for (i =3D 0; i < vm->def->ndisks; i++) { --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list