From nobody Sun Feb 8 20:53:38 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 1531829710868420.73601168417554; Tue, 17 Jul 2018 05:15:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 629BF308FBA4; Tue, 17 Jul 2018 12:15:07 +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 135873001A68; Tue, 17 Jul 2018 12:15:07 +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 9C18314B0C; Tue, 17 Jul 2018 12:15:06 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w6HCEcWA007468 for ; Tue, 17 Jul 2018 08:14:38 -0400 Received: by smtp.corp.redhat.com (Postfix) id 977C420180EB; Tue, 17 Jul 2018 12:14:38 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1A5252026D68; Tue, 17 Jul 2018 12:14:37 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 17 Jul 2018 14:14:28 +0200 Message-Id: <7002d739b4dd1ec18f171852df5c2f949cb827e2.1531829580.git.pkrempa@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 08/10] qemu: hotplug: Refactor/simplify PR managed addition to VM 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.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Tue, 17 Jul 2018 12:15:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Similarly to qemuDomainDiskRemoveManagedPR make it enter monitor on it's own so that it can be reused. Future users will be in the snapshot code and in removable media change code. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_hotplug.c | 55 ++++++++++++++++++++++++++-------------------= ---- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 57ab753974..c751660403 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -310,29 +310,31 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr drive= r, /** - * qemuDomainMaybeStartPRDaemon: + * qemuHotplugAttachManagedPR: + * @driver: QEMU driver object * @vm: domain object - * @disk: disk to hotplug - * @retProps: properties of the managed pr-manager-helper object which nee= ds - * to be added to the running vm + * @src: new disk source to be attached to @vm + * @asyncJob: asynchronous job identifier * * Checks if it's needed to start qemu-pr-helper and add the corresponding * pr-manager-helper object. * - * Returns: 0 on success, -1 on error. If @retProps is populated the - * qemu-pr-helper daemon was started. + * Returns: 0 on success, -1 on error. */ static int -qemuDomainDiskAttachManagedPR(virDomainObjPtr vm, - virDomainDiskDefPtr disk, - virJSONValuePtr *retProps) +qemuHotplugAttachManagedPR(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virStorageSourcePtr src, + qemuDomainAsyncJob asyncJob) { qemuDomainObjPrivatePtr priv =3D vm->privateData; virJSONValuePtr props =3D NULL; + bool daemonStarted =3D false; int ret =3D -1; + int rc; if (priv->prDaemonRunning || - !virStorageSourceChainHasManagedPR(disk->src)) + !virStorageSourceChainHasManagedPR(src)) return 0; if (!(props =3D qemuBuildPRManagedManagerInfoProps(priv))) @@ -341,10 +343,21 @@ qemuDomainDiskAttachManagedPR(virDomainObjPtr vm, if (qemuProcessStartManagedPRDaemon(vm) < 0) goto cleanup; - VIR_STEAL_PTR(*retProps, props); + daemonStarted =3D true; + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + goto cleanup; + + rc =3D qemuMonitorAddObject(priv->mon, &props, NULL); + + if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) + goto cleanup; + ret =3D 0; cleanup: + if (ret < 0 && daemonStarted) + qemuProcessKillManagedPRDaemon(vm); virJSONValueFree(props); return ret; } @@ -592,7 +605,6 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuHotplugDiskSourceDataPtr diskdata =3D NULL; - virErrorPtr orig_err; char *devstr =3D NULL; char *managedPrmgrAlias =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); @@ -607,9 +619,6 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) goto error; - if (qemuDomainDiskAttachManagedPR(vm, disk, &managedPrmgrProps) < 0) - goto error; - if (!(diskdata =3D qemuHotplugDiskSourceAttachPrepare(disk, priv->qemu= Caps))) goto error; @@ -619,11 +628,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks + 1) < 0) goto error; - qemuDomainObjEnterMonitor(driver, vm); + if (qemuHotplugAttachManagedPR(driver, vm, disk->src, QEMU_ASYNC_JOB_N= ONE) < 0) + goto error; - if (managedPrmgrProps && - qemuMonitorAddObject(priv->mon, &managedPrmgrProps, &managedPrmgrA= lias) < 0) - goto exit_monitor; + qemuDomainObjEnterMonitor(driver, vm); if (qemuHotplugDiskSoureceAttach(priv->mon, diskdata) < 0) goto exit_monitor; @@ -653,20 +661,15 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, exit_monitor: qemuHotplugDiskSourceRemove(priv->mon, diskdata); - virErrorPreserveLast(&orig_err); - if (managedPrmgrAlias) - ignore_value(qemuMonitorDelObject(priv->mon, managedPrmgrAlias)); if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -2; - virErrorRestore(&orig_err); + if (qemuHotplugRemoveManagedPR(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) + ret =3D -2; virDomainAuditDisk(vm, NULL, disk->src, "attach", false); error: ignore_value(qemuHotplugPrepareDiskAccess(driver, vm, disk, NULL, true= )); - if (priv->prDaemonRunning && - !virDomainDefHasManagedPR(vm->def)) - qemuProcessKillManagedPRDaemon(vm); goto cleanup; } --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list