From nobody Mon Feb 9 19:54:11 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 1538741687738730.9083285514449; Fri, 5 Oct 2018 05:14:47 -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 775E8A53C9; Fri, 5 Oct 2018 12:14:45 +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 3CFE46A745; Fri, 5 Oct 2018 12:14:45 +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 DA9B34BB79; Fri, 5 Oct 2018 12:14:44 +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 w95CEPi2017572 for ; Fri, 5 Oct 2018 08:14:25 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4991B3416C; Fri, 5 Oct 2018 12:14:25 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 991EC2E19E; Fri, 5 Oct 2018 12:14:24 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Fri, 5 Oct 2018 14:14:07 +0200 Message-Id: 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 08/12] qemu: hotplug: Prepare disk source for media changing 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.26]); Fri, 05 Oct 2018 12:14:46 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The disk storage source needs to be prepared if we want to use -blockdev or secrets for the new media image. It does not hurt to do the same for the legacy hotplug code as well. Unfortunately helpers like qemuDomainPrepareDiskSource take virDomainDiskDef as an argument and it would be hard to fix them to take an explicit source, so the function also temporarily replaces disk->src for the new source in this function. Signed-off-by: Peter Krempa --- src/qemu/qemu_hotplug.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 7ee8201ce0..d201266805 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -730,10 +730,17 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr drive= r, virStorageSourcePtr newsrc, bool force) { + virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); qemuDomainObjPrivatePtr priv =3D vm->privateData; + virStorageSourcePtr oldsrc =3D disk->src; int ret =3D -1; int rc; + disk->src =3D newsrc; + + if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) + goto cleanup; + if (qemuHotplugPrepareDiskAccess(driver, vm, disk, newsrc, false) < 0) goto cleanup; @@ -741,11 +748,11 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr drive= r, goto cleanup; if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) - rc =3D qemuDomainChangeMediaBlockdev(driver, vm, disk, disk->src, = newsrc, force); + rc =3D qemuDomainChangeMediaBlockdev(driver, vm, disk, oldsrc, new= src, force); else rc =3D qemuDomainChangeMediaLegacy(driver, vm, disk, newsrc, force= ); - virDomainAuditDisk(vm, disk->src, newsrc, "update", rc >=3D 0); + virDomainAuditDisk(vm, oldsrc, newsrc, "update", rc >=3D 0); if (rc < 0) { ignore_value(qemuHotplugPrepareDiskAccess(driver, vm, disk, newsrc= , true)); @@ -753,17 +760,24 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr drive= r, } /* remove the old source from shared device list */ + disk->src =3D oldsrc; ignore_value(qemuRemoveSharedDisk(driver, disk, vm->def->name)); - ignore_value(qemuHotplugPrepareDiskAccess(driver, vm, disk, NULL, true= )); + ignore_value(qemuHotplugPrepareDiskAccess(driver, vm, disk, oldsrc, tr= ue)); - virStorageSourceFree(disk->src); - VIR_STEAL_PTR(disk->src, newsrc); + /* media was changed, so we can remove the old media definition now */ + virStorageSourceFree(oldsrc); + oldsrc =3D NULL; + disk->src =3D newsrc; ignore_value(qemuHotplugRemoveManagedPR(driver, vm, QEMU_ASYNC_JOB_NON= E)); ret =3D 0; cleanup: + if (oldsrc) + disk->src =3D oldsrc; + + virObjectUnref(cfg); return ret; } --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list