From nobody Fri Dec 19 18:47:18 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 1548259902916887.6462769733736; Wed, 23 Jan 2019 08:11:42 -0800 (PST) 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 4690589AED; Wed, 23 Jan 2019 16:11:40 +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 00D615D6A6; Wed, 23 Jan 2019 16:11: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 5E1C43F60D; Wed, 23 Jan 2019 16:11:39 +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 x0NGBMWU014098 for ; Wed, 23 Jan 2019 11:11:22 -0500 Received: by smtp.corp.redhat.com (Postfix) id 09F345D6A6; Wed, 23 Jan 2019 16:11:22 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 83A165D739 for ; Wed, 23 Jan 2019 16:11:21 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 23 Jan 2019 17:11:05 +0100 Message-Id: <2495559246d73ae2b902225ee7233ec8d38c4ca1.1548259711.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 10/11] qemu: hotplug: Refactor qemuHotplugPrepareDiskAccess to work on virStorageSource 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: , 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.26]); Wed, 23 Jan 2019 16:11:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Rather than passing in a virStorageSource which would override the originally passed disk->src we can now drop passing in a disk completely as all functions called inside here require a virStorageSource. Signed-off-by: Peter Krempa Reviewed-by: John Ferlan --- src/qemu/qemu_hotplug.c | 75 ++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index b08f443fbc..19aed3ee8e 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -68,37 +68,29 @@ unsigned long long qemuDomainRemoveDeviceWaitTime =3D 1= 000ull * 5; /** - * qemuHotplugPrepareDiskAccess: + * qemuHotplugPrepareDiskSourceAccess: * @driver: qemu driver struct * @vm: domain object - * @disk: disk to prepare - * @overridesrc: Source different than @disk->src when necessary - * @teardown: Teardown the disk instead of adding it to a vm + * @src: Source to prepare + * @teardown: Teardown the access to @src instead of adding it to a vm * - * Setup the locks, cgroups and security permissions on a disk of a VM. - * If @overridesrc is specified the source struct is used instead of the - * one present in @disk. If @teardown is true, then the labels and cgroups - * are removed instead. + * Setup the locks, cgroups and security permissions on a disk source and = it's + * backing chain. If @teardown is true, then the labels and cgroups are re= moved + * instead. * * Returns 0 on success and -1 on error. Reports libvirt error. */ static int -qemuHotplugPrepareDiskAccess(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainDiskDefPtr disk, - virStorageSourcePtr overridesrc, - bool teardown) +qemuHotplugPrepareDiskSourceAccess(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virStorageSourcePtr src, + bool teardown) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + const char *srcstr =3D NULLSTR(src->path); int ret =3D -1; - virStorageSourcePtr origsrc =3D NULL; virErrorPtr orig_err =3D NULL; - if (overridesrc) { - origsrc =3D disk->src; - disk->src =3D overridesrc; - } - /* just tear down the disk access */ if (teardown) { virErrorPreserveLast(&orig_err); @@ -106,47 +98,38 @@ qemuHotplugPrepareDiskAccess(virQEMUDriverPtr driver, goto rollback_cgroup; } - if (virDomainLockImageAttach(driver->lockManager, cfg->uri, - vm, disk->src) < 0) + if (virDomainLockImageAttach(driver->lockManager, cfg->uri, vm, src) <= 0) goto cleanup; - if (qemuDomainNamespaceSetupDisk(vm, disk->src) < 0) + if (qemuDomainNamespaceSetupDisk(vm, src) < 0) goto rollback_lock; - if (qemuSecuritySetImageLabel(driver, vm, disk->src, true) < 0) + if (qemuSecuritySetImageLabel(driver, vm, src, true) < 0) goto rollback_namespace; - if (qemuSetupImageChainCgroup(vm, disk->src) < 0) + if (qemuSetupImageChainCgroup(vm, src) < 0) goto rollback_label; ret =3D 0; goto cleanup; rollback_cgroup: - if (qemuTeardownImageChainCgroup(vm, disk->src) < 0) - VIR_WARN("Unable to tear down cgroup access on %s", - NULLSTR(virDomainDiskGetSource(disk))); + if (qemuTeardownImageChainCgroup(vm, src) < 0) + VIR_WARN("Unable to tear down cgroup access on %s", srcstr); rollback_label: - if (qemuSecurityRestoreImageLabel(driver, vm, disk->src, true) < 0) - VIR_WARN("Unable to restore security label on %s", - NULLSTR(virDomainDiskGetSource(disk))); + if (qemuSecurityRestoreImageLabel(driver, vm, src, true) < 0) + VIR_WARN("Unable to restore security label on %s", srcstr); rollback_namespace: - if (qemuDomainNamespaceTeardownDisk(vm, disk->src) < 0) - VIR_WARN("Unable to remove /dev entry for %s", - NULLSTR(virDomainDiskGetSource(disk))); + if (qemuDomainNamespaceTeardownDisk(vm, src) < 0) + VIR_WARN("Unable to remove /dev entry for %s", srcstr); rollback_lock: - if (virDomainLockImageDetach(driver->lockManager, vm, disk->src) < 0) - VIR_WARN("Unable to release lock on %s", - NULLSTR(virDomainDiskGetSource(disk))); + if (virDomainLockImageDetach(driver->lockManager, vm, src) < 0) + VIR_WARN("Unable to release lock on %s", srcstr); cleanup: - if (origsrc) - disk->src =3D origsrc; - virErrorRestore(&orig_err); - virObjectUnref(cfg); return ret; @@ -826,7 +809,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) goto cleanup; - if (qemuHotplugPrepareDiskAccess(driver, vm, disk, newsrc, false) < 0) + if (qemuHotplugPrepareDiskSourceAccess(driver, vm, newsrc, false) < 0) goto cleanup; if (qemuHotplugAttachManagedPR(driver, vm, newsrc, QEMU_ASYNC_JOB_NONE= ) < 0) @@ -845,7 +828,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, /* 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, oldsrc, tr= ue)); + ignore_value(qemuHotplugPrepareDiskSourceAccess(driver, vm, oldsrc, tr= ue)); /* media was changed, so we can remove the old media definition now */ virStorageSourceFree(oldsrc); @@ -860,7 +843,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, if (sharedAdded) ignore_value(qemuRemoveSharedDisk(driver, disk, vm->def->name)= ); - ignore_value(qemuHotplugPrepareDiskAccess(driver, vm, disk, newsrc= , true)); + ignore_value(qemuHotplugPrepareDiskSourceAccess(driver, vm, newsrc= , true)); } /* remove PR manager object if unneeded */ @@ -891,7 +874,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, char *devstr =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); - if (qemuHotplugPrepareDiskAccess(driver, vm, disk, NULL, false) < 0) + if (qemuHotplugPrepareDiskSourceAccess(driver, vm, disk->src, false) <= 0) goto cleanup; if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0) @@ -954,7 +937,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, virDomainAuditDisk(vm, NULL, disk->src, "attach", false); error: - ignore_value(qemuHotplugPrepareDiskAccess(driver, vm, disk, NULL, true= )); + ignore_value(qemuHotplugPrepareDiskSourceAccess(driver, vm, disk->src,= true)); goto cleanup; } @@ -4377,7 +4360,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, qemuDomainReleaseDeviceAddress(vm, &disk->info, virDomainDiskGetSource= (disk)); /* tear down disk security access */ - qemuHotplugPrepareDiskAccess(driver, vm, disk, NULL, true); + qemuHotplugPrepareDiskSourceAccess(driver, vm, disk->src, true); dev.type =3D VIR_DOMAIN_DEVICE_DISK; dev.data.disk =3D disk; --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list