From nobody Mon Feb 9 03:14: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 ARC-Seal: i=1; a=rsa-sha256; t=1562947587; cv=none; d=zoho.com; s=zohoarc; b=ENB6OLIZR66Mwj+Mueh/yYNUD+Xx9EnUpiMO1PddOILipQ0VNINyUNJRiZCQaP6GpmzZoMrbUx8K5Dlrq8K2mkSyUL2zu0zqeJb9OGHGcm+SXEsgNuLU+E93Muqc1n4dyLtMyQnJhGHvHgqifjwFnSGB28IJUS1yeMsAkg9nZPo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562947587; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=mWT5FjbbCzAiDxt8fC6tTpWPulYKm++EhxqLZrcX+GE=; b=hpGEjX4YtZHc1MU+PYZP2uMZkqaRWKOvXQImmprfWqVSsa//ua6JwlmN5wrdZyMxFzQtPNQsV9x8MK4IUYrTyY/gFAt5d1MeTbwp/Ger4xrAJ9oQbfHNo/1CWwKMNUhOUjpWF8rOilb299CtauiJFfa/jmXSGWbhhD3sadYfMdA= ARC-Authentication-Results: i=1; mx.zoho.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1562947587800552.4011289029955; Fri, 12 Jul 2019 09:06:27 -0700 (PDT) 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 21C95C0586D8; Fri, 12 Jul 2019 16:06:26 +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 EA65960A9A; Fri, 12 Jul 2019 16:06:25 +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 B0CDC3D3F3; Fri, 12 Jul 2019 16:06:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6CG6LeU016355 for ; Fri, 12 Jul 2019 12:06:21 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5E9EB60C70; Fri, 12 Jul 2019 16:06:21 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 95DBF60C05; Fri, 12 Jul 2019 16:06:16 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Fri, 12 Jul 2019 18:05:47 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 06/25] qemu: blockjob: Register new and running blockjobs in the global table 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 12 Jul 2019 16:06:26 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Add the job structure to the table when instantiating a new job and remove it when it terminates/fails. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 29 ++++++++++++++++++++++------- src/qemu/qemu_blockjob.h | 6 ++++-- src/qemu/qemu_driver.c | 16 ++++++++-------- src/qemu/qemu_migration.c | 4 ++-- src/qemu/qemu_process.c | 6 +++--- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index c102417e43..8cbfc556b3 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -94,8 +94,16 @@ qemuBlockJobDataNew(qemuBlockJobType type, static int qemuBlockJobRegister(qemuBlockJobDataPtr job, + virDomainObjPtr vm, virDomainDiskDefPtr disk) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; + + if (virHashAddEntry(priv->blockjobs, job->name, virObjectRef(job)) < 0= ) { + virObjectUnref(job); + return -1; + } + if (disk) { job->disk =3D disk; QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D virObjectRef(job); @@ -106,8 +114,10 @@ qemuBlockJobRegister(qemuBlockJobDataPtr job, static void -qemuBlockJobUnregister(qemuBlockJobDataPtr job) +qemuBlockJobUnregister(qemuBlockJobDataPtr job, + virDomainObjPtr vm) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuDomainDiskPrivatePtr diskPriv; if (job->disk) { @@ -120,6 +130,9 @@ qemuBlockJobUnregister(qemuBlockJobDataPtr job) job->disk =3D NULL; } + + /* this may remove the last reference of 'job' */ + virHashRemoveEntry(priv->blockjobs, job->name); } @@ -132,7 +145,8 @@ qemuBlockJobUnregister(qemuBlockJobDataPtr job) * Returns 0 on success and -1 on failure. */ qemuBlockJobDataPtr -qemuBlockJobDiskNew(virDomainDiskDefPtr disk, +qemuBlockJobDiskNew(virDomainObjPtr vm, + virDomainDiskDefPtr disk, qemuBlockJobType type, const char *jobname) { @@ -141,7 +155,7 @@ qemuBlockJobDiskNew(virDomainDiskDefPtr disk, if (!(job =3D qemuBlockJobDataNew(type, jobname))) return NULL; - if (qemuBlockJobRegister(job, disk) < 0) + if (qemuBlockJobRegister(job, vm, disk) < 0) return NULL; VIR_RETURN_PTR(job); @@ -189,13 +203,14 @@ qemuBlockJobStarted(qemuBlockJobDataPtr job) * to @job if it was started. */ void -qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job) +qemuBlockJobStartupFinalize(virDomainObjPtr vm, + qemuBlockJobDataPtr job) { if (!job) return; if (job->state =3D=3D QEMU_BLOCKJOB_STATE_NEW) - qemuBlockJobUnregister(job); + qemuBlockJobUnregister(job, vm); virObjectUnref(job); } @@ -314,7 +329,7 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPt= r driver, virStorageSourceBackingStoreClear(disk->src); ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, NULL, true= )); ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); - qemuBlockJobUnregister(job); + qemuBlockJobUnregister(job, vm); } @@ -369,7 +384,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, } disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; - qemuBlockJobUnregister(job); + qemuBlockJobUnregister(job, vm); break; case VIR_DOMAIN_BLOCK_JOB_LAST: diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index da529090ad..b7aaa86f4d 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -80,7 +80,8 @@ struct _qemuBlockJobData { qemuBlockJobDataPtr -qemuBlockJobDiskNew(virDomainDiskDefPtr disk, +qemuBlockJobDiskNew(virDomainObjPtr vm, + virDomainDiskDefPtr disk, qemuBlockJobType type, const char *jobname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); @@ -98,7 +99,8 @@ qemuBlockJobIsRunning(qemuBlockJobDataPtr job) ATTRIBUTE_NONNULL(1); void -qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job); +qemuBlockJobStartupFinalize(virDomainObjPtr vm, + qemuBlockJobDataPtr job); int qemuBlockJobUpdate(virDomainObjPtr vm, qemuBlockJobDataPtr job, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e41a3001ae..879a78858b 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4702,7 +4702,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, } if (!(job =3D qemuBlockJobDiskGetJob(disk))) { - if (!(job =3D qemuBlockJobDiskNew(disk, type, diskAlias))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, type, diskAlias))) goto endjob; qemuBlockJobStarted(job); } @@ -4712,7 +4712,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE); endjob: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); qemuDomainObjEndJob(driver, vm); } @@ -17084,7 +17084,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, speed <<=3D 20; } - if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL, devic= e))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, QEMU_BLOCKJOB_TYPE_PULL, d= evice))) goto endjob; qemuDomainObjEnterMonitor(driver, vm); @@ -17110,7 +17110,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, qemuDomainObjEndJob(driver, vm); cleanup: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); virDomainObjEndAPI(&vm); return ret; } @@ -17655,7 +17655,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, if (qemuDomainStorageSourceChainAccessAllow(driver, vm, mirror) < 0) goto endjob; - if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, devic= e))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, QEMU_BLOCKJOB_TYPE_COPY, d= evice))) goto endjob; disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; @@ -17691,7 +17691,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, VIR_WARN("%s", _("unable to remove just-created copy target")); virStorageFileDeinit(mirror); qemuDomainObjEndJob(driver, vm); - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); return ret; } @@ -18042,7 +18042,7 @@ qemuDomainBlockCommit(virDomainPtr dom, qemuDomainStorageSourceAccessAllow(driver, vm, top_parent, false,= false) < 0)) goto endjob; - if (!(job =3D qemuBlockJobDiskNew(disk, jobtype, device))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, jobtype, device))) goto endjob; disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; @@ -18089,7 +18089,7 @@ qemuDomainBlockCommit(virDomainPtr dom, virFreeError(orig_err); } } - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); qemuDomainObjEndJob(driver, vm); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1fb88c11b6..e72553befc 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -921,7 +921,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) goto cleanup; - if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, diskA= lias))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, QEMU_BLOCKJOB_TYPE_COPY, d= iskAlias))) goto cleanup; qemuBlockJobSyncBegin(job); @@ -949,7 +949,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, ret =3D 0; cleanup: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); VIR_FREE(diskAlias); return ret; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index aa09ef175a..29124ae184 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -976,7 +976,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, } cleanup: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); qemuProcessEventFree(processEvent); virObjectUnlock(vm); return 0; @@ -7816,7 +7816,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload, disk->mirrorJob =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT) jobtype =3D disk->mirrorJob; - if (!(job =3D qemuBlockJobDiskNew(disk, jobtype, jobname))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, jobtype, jobname))) return -1; qemuBlockJobStarted(job); @@ -7850,7 +7850,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload, } cleanup: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); return 0; } --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list