From nobody Sun Apr 28 22:34:55 2024 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 154463455789065.16510640740978; Wed, 12 Dec 2018 09:09:17 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 076DD308123E; Wed, 12 Dec 2018 17:09:16 +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 AF7A1101962E; Wed, 12 Dec 2018 17:09:15 +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 36472181B9E4; Wed, 12 Dec 2018 17:09:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9BwA031716 for ; Wed, 12 Dec 2018 12:09:11 -0500 Received: by smtp.corp.redhat.com (Postfix) id D72CF6012D; Wed, 12 Dec 2018 17:09:11 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 332DB600CC; Wed, 12 Dec 2018 17:09:11 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:17 +0100 Message-Id: <83bfb1689cc9d39dd54ce189872ce25e287655bb.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 01/51] qemu: blockjob: Extract emitting of libvirt events 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 12 Dec 2018 17:09:17 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Put the emitting of VIR_DOMAIN_EVENT_ID_BLOCK_JOB and VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2 into a separate function. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 0f52996ade..ea327b83fe 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -42,6 +42,30 @@ VIR_LOG_INIT("qemu.qemu_blockjob"); +/** + * qemuBlockJobEmitEvents: + * + * Emits the VIR_DOMAIN_EVENT_ID_BLOCK_JOB and VIR_DOMAIN_EVENT_ID_BLOCK_J= OB_2 + * for a block job. + */ +static void +qemuBlockJobEmitEvents(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDiskDefPtr disk, + virDomainBlockJobType type, + virConnectDomainEventBlockJobStatus status) +{ + virObjectEventPtr event =3D NULL; + virObjectEventPtr event2 =3D NULL; + + event =3D virDomainEventBlockJobNewFromObj(vm, disk->src->path, type, = status); + virObjectEventStateQueue(driver->domainEventState, event); + + event2 =3D virDomainEventBlockJob2NewFromObj(vm, disk->dst, type, stat= us); + virObjectEventStateQueue(driver->domainEventState, event2); +} + + /** * qemuBlockJobUpdate: * @vm: domain @@ -101,9 +125,6 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, int type, int status) { - virObjectEventPtr event =3D NULL; - virObjectEventPtr event2 =3D NULL; - const char *path; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); virDomainDiskDefPtr persistDisk =3D NULL; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); @@ -114,14 +135,11 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, type, status); - /* Have to generate two variants of the event for old vs. new - * client callbacks */ if (type =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT && disk->mirrorJob =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT) type =3D disk->mirrorJob; - path =3D virDomainDiskGetSource(disk); - event =3D virDomainEventBlockJobNewFromObj(vm, path, type, status); - event2 =3D virDomainEventBlockJob2NewFromObj(vm, disk->dst, type, stat= us); + + qemuBlockJobEmitEvents(driver, vm, disk, type, status); /* If we completed a block pull or commit, then update the XML * to match. */ @@ -210,9 +228,6 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, "after block job", vm->def->name); } - virObjectEventStateQueue(driver->domainEventState, event); - virObjectEventStateQueue(driver->domainEventState, event2); - virObjectUnref(cfg); } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 154463457650466.34717612106579; Wed, 12 Dec 2018 09:09:36 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1B4B4C04B2FE; Wed, 12 Dec 2018 17:09:35 +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 9CBD860C75; Wed, 12 Dec 2018 17:09:34 +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 41CF9181B9E7; Wed, 12 Dec 2018 17:09:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9CWS031727 for ; Wed, 12 Dec 2018 12:09:12 -0500 Received: by smtp.corp.redhat.com (Postfix) id D105D6012D; Wed, 12 Dec 2018 17:09:12 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2F35A600CC; Wed, 12 Dec 2018 17:09:12 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:18 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 02/51] qemu: blockjob: Emit VIR_DOMAIN_EVENT_ID_BLOCK_JOB only for local disks 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 12 Dec 2018 17:09:35 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The event reports the disk path to identify the disk which makes sense only for local disks. Additionally network backed disks like NBD don't need to have a path so the callback would return NULL. Report VIR_DOMAIN_EVENT_ID_BLOCK_JOB only for non-empty local disks. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index ea327b83fe..d38674a9d0 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -46,7 +46,7 @@ VIR_LOG_INIT("qemu.qemu_blockjob"); * qemuBlockJobEmitEvents: * * Emits the VIR_DOMAIN_EVENT_ID_BLOCK_JOB and VIR_DOMAIN_EVENT_ID_BLOCK_J= OB_2 - * for a block job. + * for a block job. The former event is emitted only for local disks. */ static void qemuBlockJobEmitEvents(virQEMUDriverPtr driver, @@ -58,8 +58,11 @@ qemuBlockJobEmitEvents(virQEMUDriverPtr driver, virObjectEventPtr event =3D NULL; virObjectEventPtr event2 =3D NULL; - event =3D virDomainEventBlockJobNewFromObj(vm, disk->src->path, type, = status); - virObjectEventStateQueue(driver->domainEventState, event); + if (virStorageSourceIsLocalStorage(disk->src) && + !virStorageSourceIsEmpty(disk->src)) { + event =3D virDomainEventBlockJobNewFromObj(vm, disk->src->path, ty= pe, status); + virObjectEventStateQueue(driver->domainEventState, event); + } event2 =3D virDomainEventBlockJob2NewFromObj(vm, disk->dst, type, stat= us); virObjectEventStateQueue(driver->domainEventState, event2); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634559117300.7245498101331; Wed, 12 Dec 2018 09:09:19 -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 AF76599D2C; Wed, 12 Dec 2018 17:09:17 +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 56C565D70A; Wed, 12 Dec 2018 17:09:17 +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 120133F7CD; Wed, 12 Dec 2018 17:09:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9DAh031734 for ; Wed, 12 Dec 2018 12:09:13 -0500 Received: by smtp.corp.redhat.com (Postfix) id CD36D6012D; Wed, 12 Dec 2018 17:09:13 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2A80B600CC; Wed, 12 Dec 2018 17:09:13 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:19 +0100 Message-Id: <0383283626db050fea2f2e7960320a1b8177e2ca.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 03/51] qemu: processBlockJobEvent: Use qemuBlockJobUpdate to process block job events 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.38]); Wed, 12 Dec 2018 17:09:18 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Replace use of qemuBlockJobEventProcess with the general helper. A small tweak is required to pass in the 'type' and 'status' of the job via the appropriate private data variables. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_driver.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d0cf2c115a..c582e255a2 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4716,6 +4716,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, int status) { virDomainDiskDefPtr disk; + qemuDomainDiskPrivatePtr diskPriv; if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) return; @@ -4725,8 +4726,17 @@ processBlockJobEvent(virQEMUDriverPtr driver, goto endjob; } - if ((disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NUL= L))) - qemuBlockJobEventProcess(driver, vm, disk, QEMU_ASYNC_JOB_NONE, ty= pe, status); + if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NU= LL))) { + VIR_DEBUG("disk %s not found", diskAlias); + goto endjob; + } + + diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + + diskPriv->blockJobType =3D type; + diskPriv->blockJobStatus =3D status; + + qemuBlockJobUpdate(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); endjob: qemuDomainObjEndJob(driver, vm); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634575978991.3803649896743; Wed, 12 Dec 2018 09:09:35 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6B463307EA9D; Wed, 12 Dec 2018 17:09:34 +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 19BCD60C46; Wed, 12 Dec 2018 17:09:34 +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 C711A3F600; Wed, 12 Dec 2018 17:09:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9G8f031752 for ; Wed, 12 Dec 2018 12:09:16 -0500 Received: by smtp.corp.redhat.com (Postfix) id B24D16012D; Wed, 12 Dec 2018 17:09:16 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 10ED7600CC; Wed, 12 Dec 2018 17:09:13 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:20 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 04/51] qemu: blockjob: Unexport qemuBlockJobEventProcess 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 12 Dec 2018 17:09:35 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The function is now only called locally. Some code movement was necessary to avoid forward declarations. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 80 ++++++++++++++++++++-------------------- src/qemu/qemu_blockjob.h | 6 --- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index d38674a9d0..32fa9876b5 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -69,45 +69,6 @@ qemuBlockJobEmitEvents(virQEMUDriverPtr driver, } -/** - * qemuBlockJobUpdate: - * @vm: domain - * @disk: domain disk - * @error: error (output parameter) - * - * Update disk's mirror state in response to a block job event stored in - * blockJobStatus by qemuProcessHandleBlockJob event handler. - * - * Returns the block job event processed or -1 if there was no pending eve= nt. - */ -int -qemuBlockJobUpdate(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - virDomainDiskDefPtr disk, - char **error) -{ - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - qemuDomainObjPrivatePtr priv =3D vm->privateData; - int status =3D diskPriv->blockJobStatus; - - if (error) - *error =3D NULL; - - if (status !=3D -1) { - qemuBlockJobEventProcess(priv->driver, vm, disk, asyncJob, - diskPriv->blockJobType, - diskPriv->blockJobStatus); - diskPriv->blockJobStatus =3D -1; - if (error) - VIR_STEAL_PTR(*error, diskPriv->blockJobError); - else - VIR_FREE(diskPriv->blockJobError); - } - - return status; -} - - /** * qemuBlockJobEventProcess: * @driver: qemu driver @@ -120,7 +81,7 @@ qemuBlockJobUpdate(virDomainObjPtr vm, * from QEMU. For mirror state's that must survive libvirt * restart, also update the domain's status XML. */ -void +static void qemuBlockJobEventProcess(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, @@ -235,6 +196,45 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, } +/** + * qemuBlockJobUpdate: + * @vm: domain + * @disk: domain disk + * @error: error (output parameter) + * + * Update disk's mirror state in response to a block job event stored in + * blockJobStatus by qemuProcessHandleBlockJob event handler. + * + * Returns the block job event processed or -1 if there was no pending eve= nt. + */ +int +qemuBlockJobUpdate(virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob, + virDomainDiskDefPtr disk, + char **error) +{ + qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuDomainObjPrivatePtr priv =3D vm->privateData; + int status =3D diskPriv->blockJobStatus; + + if (error) + *error =3D NULL; + + if (status !=3D -1) { + qemuBlockJobEventProcess(priv->driver, vm, disk, asyncJob, + diskPriv->blockJobType, + diskPriv->blockJobStatus); + diskPriv->blockJobStatus =3D -1; + if (error) + VIR_STEAL_PTR(*error, diskPriv->blockJobError); + else + VIR_FREE(diskPriv->blockJobError); + } + + return status; +} + + /** * qemuBlockJobSyncBegin: * @disk: domain disk diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index cee3ee21c4..c14d26a6a1 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -30,12 +30,6 @@ int qemuBlockJobUpdate(virDomainObjPtr vm, qemuDomainAsyncJob asyncJob, virDomainDiskDefPtr disk, char **error); -void qemuBlockJobEventProcess(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainDiskDefPtr disk, - qemuDomainAsyncJob asyncJob, - int type, - int status); void qemuBlockJobSyncBegin(virDomainDiskDefPtr disk); void qemuBlockJobSyncEnd(virDomainObjPtr vm, --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634576659609.3950945157662; Wed, 12 Dec 2018 09:09:36 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1603B3082E72; Wed, 12 Dec 2018 17:09:35 +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 9A5EB60C74; Wed, 12 Dec 2018 17:09:34 +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 429ED3F604; Wed, 12 Dec 2018 17:09:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9H0W031759 for ; Wed, 12 Dec 2018 12:09:17 -0500 Received: by smtp.corp.redhat.com (Postfix) id B32966012D; Wed, 12 Dec 2018 17:09:17 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0CCA5600CC; Wed, 12 Dec 2018 17:09:16 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:21 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 05/51] qemu: blockjob: Rename public APIs 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 12 Dec 2018 17:09:36 +0000 (UTC) Content-Type: text/plain; charset="utf-8" All the public APIs of the qemu_blockjob module operate on a 'disk'. Since I'll be adding APIs which operate on a job later let's rename the existing ones. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 28 ++++++++++++++-------------- src/qemu/qemu_blockjob.h | 16 ++++++++-------- src/qemu/qemu_driver.c | 10 +++++----- src/qemu/qemu_migration.c | 20 ++++++++++---------- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 32fa9876b5..8b51235795 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -197,7 +197,7 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, /** - * qemuBlockJobUpdate: + * qemuBlockJobUpdateDisk: * @vm: domain * @disk: domain disk * @error: error (output parameter) @@ -208,10 +208,10 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, * Returns the block job event processed or -1 if there was no pending eve= nt. */ int -qemuBlockJobUpdate(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - virDomainDiskDefPtr disk, - char **error) +qemuBlockJobUpdateDisk(virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob, + virDomainDiskDefPtr disk, + char **error) { qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); qemuDomainObjPrivatePtr priv =3D vm->privateData; @@ -236,20 +236,20 @@ qemuBlockJobUpdate(virDomainObjPtr vm, /** - * qemuBlockJobSyncBegin: + * qemuBlockJobSyncBeginDisk: * @disk: domain disk * * Begin a new synchronous block job for @disk. The synchronous - * block job is ended by a call to qemuBlockJobSyncEnd, or by + * block job is ended by a call to qemuBlockJobSyncEndDisk, or by * the guest quitting. * * During a synchronous block job, a block job event for @disk * will not be processed asynchronously. Instead, it will be - * processed only when qemuBlockJobUpdate or qemuBlockJobSyncEnd + * processed only when qemuBlockJobUpdateDisk or qemuBlockJobSyncEndDisk * is called. */ void -qemuBlockJobSyncBegin(virDomainDiskDefPtr disk) +qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) { qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); @@ -260,7 +260,7 @@ qemuBlockJobSyncBegin(virDomainDiskDefPtr disk) /** - * qemuBlockJobSyncEnd: + * qemuBlockJobSyncEndDisk: * @vm: domain * @disk: domain disk * @@ -268,11 +268,11 @@ qemuBlockJobSyncBegin(virDomainDiskDefPtr disk) * for the disk is processed. */ void -qemuBlockJobSyncEnd(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - virDomainDiskDefPtr disk) +qemuBlockJobSyncEndDisk(virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob, + virDomainDiskDefPtr disk) { VIR_DEBUG("disk=3D%s", disk->dst); - qemuBlockJobUpdate(vm, asyncJob, disk, NULL); + qemuBlockJobUpdateDisk(vm, asyncJob, disk, NULL); QEMU_DOMAIN_DISK_PRIVATE(disk)->blockJobSync =3D false; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index c14d26a6a1..9f7677dc1e 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -26,14 +26,14 @@ # include "qemu_conf.h" # include "qemu_domain.h" -int qemuBlockJobUpdate(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - virDomainDiskDefPtr disk, - char **error); +int qemuBlockJobUpdateDisk(virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob, + virDomainDiskDefPtr disk, + char **error); -void qemuBlockJobSyncBegin(virDomainDiskDefPtr disk); -void qemuBlockJobSyncEnd(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, - virDomainDiskDefPtr disk); +void qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk); +void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob, + virDomainDiskDefPtr disk); #endif /* __QEMU_BLOCKJOB_H__ */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c582e255a2..1b2a2d70ec 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4736,7 +4736,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, diskPriv->blockJobType =3D type; diskPriv->blockJobStatus =3D status; - qemuBlockJobUpdate(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); endjob: qemuDomainObjEndJob(driver, vm); @@ -17361,7 +17361,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, } if (!async) - qemuBlockJobSyncBegin(disk); + qemuBlockJobSyncBeginDisk(disk); if (pivot) { if ((ret =3D qemuDomainBlockPivot(driver, vm, device, disk)) < 0) @@ -17400,19 +17400,19 @@ qemuDomainBlockJobAbort(virDomainPtr dom, * scheduled block jobs from confusing us. */ if (!async) { qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - qemuBlockJobUpdate(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); while (diskPriv->blockjob) { if (virDomainObjWait(vm) < 0) { ret =3D -1; goto endjob; } - qemuBlockJobUpdate(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); } } endjob: if (disk) - qemuBlockJobSyncEnd(vm, QEMU_ASYNC_JOB_NONE, disk); + qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_NONE, disk); qemuDomainObjEndJob(driver, vm); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index a0b622d2ea..8720b34311 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -490,7 +490,7 @@ qemuMigrationSrcNBDStorageCopyReady(virDomainObjPtr vm, if (!diskPriv->migrating) continue; - status =3D qemuBlockJobUpdate(vm, asyncJob, disk, &error); + status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_FAILED) { if (error) { virReportError(VIR_ERR_OPERATION_FAILED, @@ -549,7 +549,7 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, if (!diskPriv->migrating) continue; - status =3D qemuBlockJobUpdate(vm, asyncJob, disk, &error); + status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: if (check) { @@ -566,7 +566,7 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, ATTRIBUTE_FALLTHROUGH; case VIR_DOMAIN_BLOCK_JOB_CANCELED: case VIR_DOMAIN_BLOCK_JOB_COMPLETED: - qemuBlockJobSyncEnd(vm, asyncJob, disk); + qemuBlockJobSyncEndDisk(vm, asyncJob, disk); diskPriv->migrating =3D false; break; @@ -630,7 +630,7 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr drive= r, int status; int rv; - status =3D qemuBlockJobUpdate(vm, asyncJob, disk, &error); + status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: case VIR_DOMAIN_BLOCK_JOB_CANCELED: @@ -712,7 +712,7 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, err =3D virSaveLastError(); failed =3D true; } - qemuBlockJobSyncEnd(vm, asyncJob, disk); + qemuBlockJobSyncEndDisk(vm, asyncJob, disk); diskPriv->migrating =3D false; } } @@ -954,7 +954,7 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr driver, if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) goto cleanup; - qemuBlockJobSyncBegin(disk); + qemuBlockJobSyncBeginDisk(disk); if (flags & VIR_MIGRATE_TLS) { rc =3D qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, @@ -971,7 +971,7 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr driver, } if (rc < 0) { - qemuBlockJobSyncEnd(vm, QEMU_ASYNC_JOB_MIGRATION_OUT, disk); + qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_MIGRATION_OUT, disk= ); goto cleanup; } @@ -5355,7 +5355,7 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; if (QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating) { - qemuBlockJobSyncBegin(disk); + qemuBlockJobSyncBeginDisk(disk); storage =3D true; } } @@ -5385,7 +5385,7 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, VIR_DEBUG("Drive mirror on disk %s is still running", disk->ds= t); } else { VIR_DEBUG("Drive mirror on disk %s is gone", disk->dst); - qemuBlockJobSyncEnd(vm, QEMU_ASYNC_JOB_NONE, disk); + qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_NONE, disk); diskPriv->migrating =3D false; } } @@ -5407,7 +5407,7 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE= (disk); if (diskPriv->migrating) { - qemuBlockJobSyncEnd(vm, QEMU_ASYNC_JOB_NONE, disk); + qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_NONE, disk); diskPriv->migrating =3D false; } } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634580678234.28065398694628; Wed, 12 Dec 2018 09:09:40 -0800 (PST) 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 E05B8307EAB7; Wed, 12 Dec 2018 17:09:38 +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 9D8CB608F8; Wed, 12 Dec 2018 17:09:38 +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 50E8D3F608; Wed, 12 Dec 2018 17:09:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9Igt031769 for ; Wed, 12 Dec 2018 12:09:18 -0500 Received: by smtp.corp.redhat.com (Postfix) id AACFC6012B; Wed, 12 Dec 2018 17:09:18 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 08304600CC; Wed, 12 Dec 2018 17:09:17 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:22 +0100 Message-Id: <4705fb748ce37b6ffd01a39b94e2d873ffc1a3fc.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 06/51] qemu: blockjob: Remove header dependency on qemu_domain.h 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.44]); Wed, 12 Dec 2018 17:09:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The blockjob module uses 'qemuDomainAsyncJob' in it's public headers. As I plan adding a new structure containing job data which will need to be included in "qemu_domain.h" it's necessary to break the circular dependency. Convert 'qemuDomainAsyncJob' type to 'int' as it's an enum. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 6 +++--- src/qemu/qemu_blockjob.h | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 8b51235795..1b6d16cbb9 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -85,7 +85,7 @@ static void qemuBlockJobEventProcess(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - qemuDomainAsyncJob asyncJob, + int asyncJob, int type, int status) { @@ -209,7 +209,7 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, */ int qemuBlockJobUpdateDisk(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, + int asyncJob, virDomainDiskDefPtr disk, char **error) { @@ -269,7 +269,7 @@ qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) */ void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, + int asyncJob, virDomainDiskDefPtr disk) { VIR_DEBUG("disk=3D%s", disk->dst); diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 9f7677dc1e..0c440757f2 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -24,16 +24,15 @@ # include "internal.h" # include "qemu_conf.h" -# include "qemu_domain.h" int qemuBlockJobUpdateDisk(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, + int asyncJob, virDomainDiskDefPtr disk, char **error); void qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk); void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob, + int asyncJob, virDomainDiskDefPtr disk); #endif /* __QEMU_BLOCKJOB_H__ */ --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634584242853.8507002580616; Wed, 12 Dec 2018 09:09:44 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E35AE307CDD8; Wed, 12 Dec 2018 17:09:42 +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 AEDB65ED4E; Wed, 12 Dec 2018 17:09:42 +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 6E5913F60F; Wed, 12 Dec 2018 17:09:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9J35031774 for ; Wed, 12 Dec 2018 12:09:19 -0500 Received: by smtp.corp.redhat.com (Postfix) id A8B506012E; Wed, 12 Dec 2018 17:09:19 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0587C600CC; Wed, 12 Dec 2018 17:09:18 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:23 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 07/51] qemu: Consolidate disk blockjob variables into a structure 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 12 Dec 2018 17:09:43 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Struct qemuDomainDiskPrivate was holding multiple variables connected to a disk block job. Consolidate them into a new struct qemuBlockJobData. This will also allow simpler extensions to the block job mechanisms. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 36 +++++++++++++++++++++++------------- src/qemu/qemu_blockjob.h | 15 +++++++++++++++ src/qemu/qemu_domain.c | 12 +++++++++--- src/qemu/qemu_domain.h | 9 ++------- src/qemu/qemu_driver.c | 16 ++++++++-------- src/qemu/qemu_process.c | 15 ++++++++------- 6 files changed, 65 insertions(+), 38 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 1b6d16cbb9..b1a30b1edb 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -42,6 +42,17 @@ VIR_LOG_INIT("qemu.qemu_blockjob"); +void +qemuBlockJobDataFree(qemuBlockJobDataPtr job) +{ + if (!job) + return; + + VIR_FREE(job->errmsg); + VIR_FREE(job); +} + + /** * qemuBlockJobEmitEvents: * @@ -160,7 +171,7 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, virStorageSourceBackingStoreClear(disk->src); ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); - diskPriv->blockjob =3D false; + diskPriv->blockjob->started =3D false; break; case VIR_DOMAIN_BLOCK_JOB_READY: @@ -176,7 +187,7 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, } disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; - diskPriv->blockjob =3D false; + diskPriv->blockjob->started =3D false; break; case VIR_DOMAIN_BLOCK_JOB_LAST: @@ -213,22 +224,21 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, virDomainDiskDefPtr disk, char **error) { - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; qemuDomainObjPrivatePtr priv =3D vm->privateData; - int status =3D diskPriv->blockJobStatus; + int status =3D job->status; if (error) *error =3D NULL; if (status !=3D -1) { qemuBlockJobEventProcess(priv->driver, vm, disk, asyncJob, - diskPriv->blockJobType, - diskPriv->blockJobStatus); - diskPriv->blockJobStatus =3D -1; + job->type, status); + job->status =3D -1; if (error) - VIR_STEAL_PTR(*error, diskPriv->blockJobError); + VIR_STEAL_PTR(*error, job->errmsg); else - VIR_FREE(diskPriv->blockJobError); + VIR_FREE(job->errmsg); } return status; @@ -251,11 +261,11 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, void qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) { - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; VIR_DEBUG("disk=3D%s", disk->dst); - diskPriv->blockJobSync =3D true; - diskPriv->blockJobStatus =3D -1; + job->synchronous =3D true; + job->status =3D -1; } @@ -274,5 +284,5 @@ qemuBlockJobSyncEndDisk(virDomainObjPtr vm, { VIR_DEBUG("disk=3D%s", disk->dst); qemuBlockJobUpdateDisk(vm, asyncJob, disk, NULL); - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockJobSync =3D false; + QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->synchronous =3D false; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 0c440757f2..1479c6f720 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -25,6 +25,21 @@ # include "internal.h" # include "qemu_conf.h" + +typedef struct _qemuBlockJobData qemuBlockJobData; +typedef qemuBlockJobData *qemuBlockJobDataPtr; + +struct _qemuBlockJobData { + bool started; + int type; + int status; + char *errmsg; + bool synchronous; /* API call is waiting for this job */ +}; + +void +qemuBlockJobDataFree(qemuBlockJobDataPtr job); + int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, virDomainDiskDefPtr disk, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 1eb0e31df0..5a64231f95 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1062,6 +1062,11 @@ qemuDomainDiskPrivateNew(void) if (!(priv =3D virObjectNew(qemuDomainDiskPrivateClass))) return NULL; + if (VIR_ALLOC(priv->blockjob) < 0) { + virObjectUnref(priv); + priv =3D NULL; + } + return (virObjectPtr) priv; } @@ -1070,10 +1075,10 @@ qemuDomainDiskPrivateDispose(void *obj) { qemuDomainDiskPrivatePtr priv =3D obj; - VIR_FREE(priv->blockJobError); virStorageSourceFree(priv->migrSource); VIR_FREE(priv->qomName); VIR_FREE(priv->nodeCopyOnRead); + qemuBlockJobDataFree(priv->blockjob); } static virClassPtr qemuDomainStorageSourcePrivateClass; @@ -9255,7 +9260,8 @@ qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr di= sk) return true; } - if (diskPriv->blockjob) { + if (diskPriv->blockjob && + diskPriv->blockjob->started) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("disk '%s' already in active block job"), disk->dst); @@ -9284,7 +9290,7 @@ qemuDomainHasBlockjob(virDomainObjPtr vm, virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - if (!copy_only && diskPriv->blockjob) + if (!copy_only && diskPriv->blockjob && diskPriv->blockjob->starte= d) return true; if (disk->mirror && disk->mirrorJob =3D=3D VIR_DOMAIN_BLOCK_JOB_TY= PE_COPY) diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 53b5ea1678..a03950e77b 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -32,6 +32,7 @@ # include "snapshot_conf.h" # include "qemu_monitor.h" # include "qemu_agent.h" +# include "qemu_blockjob.h" # include "qemu_conf.h" # include "qemu_capabilities.h" # include "qemu_migration_params.h" @@ -388,13 +389,7 @@ struct _qemuDomainDiskPrivate { /* ideally we want a smarter way to interlock block jobs on single qem= u disk * in the future, but for now we just disallow any concurrent job on a * single disk */ - bool blockjob; - - /* for some synchronous block jobs, we need to notify the owner */ - int blockJobType; /* type of the block job from the event */ - int blockJobStatus; /* status of the finished block job */ - char *blockJobError; /* block job completed event error */ - bool blockJobSync; /* the block job needs synchronized termination */ + qemuBlockJobDataPtr blockjob; bool migrating; /* the disk is being migrated */ virStorageSourcePtr migrSource; /* disk source object used for NBD mig= ration */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1b2a2d70ec..d06eabb265 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4716,7 +4716,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, int status) { virDomainDiskDefPtr disk; - qemuDomainDiskPrivatePtr diskPriv; + qemuBlockJobDataPtr job; if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) return; @@ -4731,10 +4731,10 @@ processBlockJobEvent(virQEMUDriverPtr driver, goto endjob; } - diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; - diskPriv->blockJobType =3D type; - diskPriv->blockJobStatus =3D status; + job->type =3D type; + job->status =3D status; qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); @@ -17294,7 +17294,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, if (ret < 0) goto endjob; - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D true; + QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->started =3D true; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after state change", @@ -17401,7 +17401,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, if (!async) { qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); - while (diskPriv->blockjob) { + while (diskPriv->blockjob->started) { if (virDomainObjWait(vm) < 0) { ret =3D -1; goto endjob; @@ -17825,7 +17825,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, disk->mirror =3D mirror; mirror =3D NULL; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_COPY; - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D true; + QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->started =3D true; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after state change", @@ -18225,7 +18225,7 @@ qemuDomainBlockCommit(virDomainPtr dom, } if (ret =3D=3D 0) { - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D true; + QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->started =3D true; mirror =3D NULL; } else { disk->mirror =3D NULL; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 2f8e19d29d..72725fcdf1 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -926,7 +926,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, virQEMUDriverPtr driver =3D opaque; struct qemuProcessEvent *processEvent =3D NULL; virDomainDiskDefPtr disk; - qemuDomainDiskPrivatePtr diskPriv; + qemuBlockJobDataPtr job; char *data =3D NULL; virObjectLock(vm); @@ -936,14 +936,15 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUT= E_UNUSED, if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NU= LL))) goto error; - diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - if (diskPriv->blockJobSync) { + job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + if (job->synchronous) { /* We have a SYNC API waiting for this event, dispatch it back */ - diskPriv->blockJobType =3D type; - diskPriv->blockJobStatus =3D status; - VIR_FREE(diskPriv->blockJobError); - ignore_value(VIR_STRDUP_QUIET(diskPriv->blockJobError, error)); + job->type =3D type; + job->status =3D status; + VIR_FREE(job->errmsg); + ignore_value(VIR_STRDUP_QUIET(job->errmsg, error)); virDomainObjBroadcast(vm); } else { /* there is no waiting SYNC API, dispatch the update to a thread */ --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634580153337.0983599464224; Wed, 12 Dec 2018 09:09:40 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BFAFBC0669AC; Wed, 12 Dec 2018 17:09:38 +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 778825C22D; Wed, 12 Dec 2018 17:09:38 +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 204B7181B9F6; Wed, 12 Dec 2018 17:09:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9KGJ031783 for ; Wed, 12 Dec 2018 12:09:20 -0500 Received: by smtp.corp.redhat.com (Postfix) id A6A226012D; Wed, 12 Dec 2018 17:09:20 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 01CCD600CC; Wed, 12 Dec 2018 17:09:19 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:24 +0100 Message-Id: <66d1eb8e69102302ac18e131322ed80dbebcbaa1.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 08/51] qemu: process: Consolidate error paths in qemuProcessHandleBlockJob 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 12 Dec 2018 17:09:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" 'cleanup' label was accessed only from a jump to 'error'. Consolidate everyting into 'cleanup'. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_process.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 72725fcdf1..3fccbc79bb 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -935,7 +935,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, diskAlias, vm, vm->def->name, type, status); if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NU= LL))) - goto error; + goto cleanup; job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; @@ -949,11 +949,11 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUT= E_UNUSED, } else { /* there is no waiting SYNC API, dispatch the update to a thread */ if (VIR_ALLOC(processEvent) < 0) - goto error; + goto cleanup; processEvent->eventType =3D QEMU_PROCESS_EVENT_BLOCK_JOB; if (VIR_STRDUP(data, diskAlias) < 0) - goto error; + goto cleanup; processEvent->data =3D data; processEvent->vm =3D virObjectRef(vm); processEvent->action =3D type; @@ -961,16 +961,16 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUT= E_UNUSED, if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0)= { ignore_value(virObjectUnref(vm)); - goto error; + goto cleanup; } + + processEvent =3D NULL; } cleanup: + qemuProcessEventFree(processEvent); virObjectUnlock(vm); return 0; - error: - qemuProcessEventFree(processEvent); - goto cleanup; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634589695459.26604621697993; Wed, 12 Dec 2018 09:09:49 -0800 (PST) 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 E6821307CEBD; Wed, 12 Dec 2018 17:09: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 B498160139; Wed, 12 Dec 2018 17:09: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 5E55F18327E8; Wed, 12 Dec 2018 17:09:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9Lu7031798 for ; Wed, 12 Dec 2018 12:09:21 -0500 Received: by smtp.corp.redhat.com (Postfix) id A1B546012D; Wed, 12 Dec 2018 17:09:21 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id F329B600CC; Wed, 12 Dec 2018 17:09:20 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:25 +0100 Message-Id: <127d87cae67bfa32e5e122d9a2451b4ece49db76.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 09/51] qemu: blockjob: Rename qemuBlockJobEventProcess to qemuBlockJobEventProcessLegacy 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 12 Dec 2018 17:09:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" This will handle blockjob finalizing for the old approach so rename it accordingly. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index b1a30b1edb..5934d58480 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -81,7 +81,7 @@ qemuBlockJobEmitEvents(virQEMUDriverPtr driver, /** - * qemuBlockJobEventProcess: + * qemuBlockJobEventProcessLegacy: * @driver: qemu driver * @vm: domain * @disk: domain disk @@ -93,12 +93,12 @@ qemuBlockJobEmitEvents(virQEMUDriverPtr driver, * restart, also update the domain's status XML. */ static void -qemuBlockJobEventProcess(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainDiskDefPtr disk, - int asyncJob, - int type, - int status) +qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDiskDefPtr disk, + int asyncJob, + int type, + int status) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); virDomainDiskDefPtr persistDisk =3D NULL; @@ -232,8 +232,8 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, *error =3D NULL; if (status !=3D -1) { - qemuBlockJobEventProcess(priv->driver, vm, disk, asyncJob, - job->type, status); + qemuBlockJobEventProcessLegacy(priv->driver, vm, disk, asyncJob, + job->type, status); job->status =3D -1; if (error) VIR_STEAL_PTR(*error, job->errmsg); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634592671336.8097812716985; Wed, 12 Dec 2018 09:09:52 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F0DD9307CDC8; Wed, 12 Dec 2018 17:09:50 +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 B6D421C948; Wed, 12 Dec 2018 17:09:50 +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 6F3CB184B54D; Wed, 12 Dec 2018 17:09:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9MDD031805 for ; Wed, 12 Dec 2018 12:09:22 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9E2D16012D; Wed, 12 Dec 2018 17:09:22 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id F0198600CC; Wed, 12 Dec 2018 17:09:21 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:26 +0100 Message-Id: <28e9a38bd024c274b1312bdc2c1324b18bd414f1.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 10/51] qemu: blockjob: Split out handling of comlpleted jobs 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.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 12 Dec 2018 17:09:51 +0000 (UTC) Content-Type: text/plain; charset="utf-8" qemuBlockJobEventProcessLegacy was getting too big. Remove handling of completed jobs in a separate function. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 118 +++++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 53 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 5934d58480..a7cdc3c068 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -80,6 +80,70 @@ qemuBlockJobEmitEvents(virQEMUDriverPtr driver, } +static void +qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDiskDefPtr disk, + int asyncJob) +{ + qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + virDomainDiskDefPtr persistDisk =3D NULL; + + if (disk->mirrorState =3D=3D VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT) { + if (vm->newDef) { + virStorageSourcePtr copy =3D NULL; + + if ((persistDisk =3D virDomainDiskByName(vm->newDef, + disk->dst, false))) { + copy =3D virStorageSourceCopy(disk->mirror, false); + if (!copy || + virStorageSourceInitChainElement(copy, + persistDisk->src, + true) < 0) { + VIR_WARN("Unable to update persistent definition " + "on vm %s after block job", + vm->def->name); + virStorageSourceFree(copy); + copy =3D NULL; + persistDisk =3D NULL; + } + } + if (copy) { + virStorageSourceFree(persistDisk->src); + persistDisk->src =3D copy; + } + } + + /* XXX We want to revoke security labels as well as audit that + * revocation, before dropping the original source. But it gets + * tricky if both source and mirror share common backing files (we + * want to only revoke the non-shared portion of the chain); so for + * now, we leak the access to the original. */ + virDomainLockImageDetach(driver->lockManager, vm, disk->src); + virStorageSourceFree(disk->src); + disk->src =3D disk->mirror; + } else { + if (disk->mirror) { + virDomainLockImageDetach(driver->lockManager, vm, disk->mirror= ); + virStorageSourceFree(disk->mirror); + } + } + + /* Recompute the cached backing chain to match our + * updates. Better would be storing the chain ourselves + * rather than reprobing, but we haven't quite completed + * that conversion to use our XML tracking. */ + disk->mirror =3D NULL; + disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; + disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; + disk->src->id =3D 0; + virStorageSourceBackingStoreClear(disk->src); + ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); + ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); + diskPriv->blockjob->started =3D false; +} + + /** * qemuBlockJobEventProcessLegacy: * @driver: qemu driver @@ -101,7 +165,6 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, int status) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); - virDomainDiskDefPtr persistDisk =3D NULL; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); VIR_DEBUG("disk=3D%s, mirrorState=3D%s, type=3D%d, status=3D%d", @@ -120,58 +183,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, * to match. */ switch ((virConnectDomainEventBlockJobStatus) status) { case VIR_DOMAIN_BLOCK_JOB_COMPLETED: - if (disk->mirrorState =3D=3D VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT) { - if (vm->newDef) { - virStorageSourcePtr copy =3D NULL; - - if ((persistDisk =3D virDomainDiskByName(vm->newDef, - disk->dst, false)))= { - copy =3D virStorageSourceCopy(disk->mirror, false); - if (!copy || - virStorageSourceInitChainElement(copy, - persistDisk->src, - true) < 0) { - VIR_WARN("Unable to update persistent definition " - "on vm %s after block job", - vm->def->name); - virStorageSourceFree(copy); - copy =3D NULL; - persistDisk =3D NULL; - } - } - if (copy) { - virStorageSourceFree(persistDisk->src); - persistDisk->src =3D copy; - } - } - - /* XXX We want to revoke security labels as well as audit that - * revocation, before dropping the original source. But it ge= ts - * tricky if both source and mirror share common backing files= (we - * want to only revoke the non-shared portion of the chain); s= o for - * now, we leak the access to the original. */ - virDomainLockImageDetach(driver->lockManager, vm, disk->src); - virStorageSourceFree(disk->src); - disk->src =3D disk->mirror; - } else { - if (disk->mirror) { - virDomainLockImageDetach(driver->lockManager, vm, disk->mi= rror); - virStorageSourceFree(disk->mirror); - } - } - - /* Recompute the cached backing chain to match our - * updates. Better would be storing the chain ourselves - * rather than reprobing, but we haven't quite completed - * that conversion to use our XML tracking. */ - disk->mirror =3D NULL; - disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; - disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; - disk->src->id =3D 0; - virStorageSourceBackingStoreClear(disk->src); - ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); - ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); - diskPriv->blockjob->started =3D false; + qemuBlockJobEventProcessLegacyCompleted(driver, vm, disk, asyncJob= ); break; case VIR_DOMAIN_BLOCK_JOB_READY: --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634597009845.7685264351919; Wed, 12 Dec 2018 09:09:57 -0800 (PST) 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 8EE90308ED62; Wed, 12 Dec 2018 17:09:55 +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 517686013B; Wed, 12 Dec 2018 17:09:55 +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 0363F181B9EA; Wed, 12 Dec 2018 17:09:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9Nu5031820 for ; Wed, 12 Dec 2018 12:09:23 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9C6BA6012E; Wed, 12 Dec 2018 17:09:23 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id EC415600CC; Wed, 12 Dec 2018 17:09:22 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:27 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 11/51] qemu: migration: Properly note that non-shared-storage migration uses a blockjob 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 12 Dec 2018 17:09:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Internally we do a 'block-copy' to accomodate non-shared storage migration but the code did not fill in that the block job was active on the disk when starting the copy job. Since we handle block jobs finishes regardless of having it registered it's not a problem but soon will become one. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_migration.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 8720b34311..5d2eb60f03 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -977,6 +977,7 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr driver, VIR_FREE(diskAlias); diskPriv->migrating =3D true; + diskPriv->blockjob->started =3D true; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver-= >caps) < 0) { VIR_WARN("Failed to save status on vm %s", vm->def->name); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 15446345846921000.9861994796784; Wed, 12 Dec 2018 09:09:44 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C7D7E750E3; Wed, 12 Dec 2018 17:09:42 +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 863095FC2E; Wed, 12 Dec 2018 17:09:42 +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 3911F181BA1A; Wed, 12 Dec 2018 17:09:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9OEU031829 for ; Wed, 12 Dec 2018 12:09:24 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9670F6012B; Wed, 12 Dec 2018 17:09:24 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id E71976012D; Wed, 12 Dec 2018 17:09:23 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:28 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 12/51] qemu: process: refresh block jobs on reconnect 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 12 Dec 2018 17:09:43 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Block job state was widely untracked by libvirt across restarts which was allowed by a stateless block job finishing handler which discarded disk state and redetected it. This is undesirable since we'll need to track more information for individual blockjobs due to -blockdev integration requirements. In case of legacy blockjobs we can recover whether the job is present at reconnect time by querying qemu. Adding tracking whether a job is present will allow simplification of the non-shared-storage cancellation code. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_process.c | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3fccbc79bb..471e11115f 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7755,6 +7755,70 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver, } +static int +qemuProcessRefreshLegacyBlockjob(void *payload, + const void *name, + void *opaque) +{ + const char *jobname =3D name; + virDomainObjPtr vm =3D opaque; + qemuMonitorBlockJobInfoPtr info =3D payload; + virDomainDiskDefPtr disk; + qemuDomainDiskPrivatePtr diskPriv; + qemuBlockJobDataPtr job; + + if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, jobname, jobn= ame))) { + VIR_DEBUG("could not find disk for block job '%s'", jobname); + return 0; + } + + diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + job =3D diskPriv->blockjob; + + if (disk->mirror) { + if (info->ready =3D=3D 1 || + (info->ready =3D=3D -1 && info->end =3D=3D info->cur)) + disk->mirrorState =3D VIR_DOMAIN_BLOCK_JOB_READY; + } + + job->started =3D true; + job->status =3D -1; + + return 0; +} + + +static int +qemuProcessRefreshLegacyBlockjobs(virQEMUDriverPtr driver, + virDomainObjPtr vm) +{ + virHashTablePtr blockJobs =3D NULL; + int ret =3D -1; + + qemuDomainObjEnterMonitor(driver, vm); + blockJobs =3D qemuMonitorGetAllBlockJobInfo(qemuDomainGetMonitor(vm)); + if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockJobs) + goto cleanup; + + if (virHashForEach(blockJobs, qemuProcessRefreshLegacyBlockjob, vm) < = 0) + goto cleanup; + + ret =3D 0; + + cleanup: + virHashFree(blockJobs); + return ret; +} + + +static int +qemuProcessRefreshBlockjobs(virQEMUDriverPtr driver, + virDomainObjPtr vm) +{ + return qemuProcessRefreshLegacyBlockjobs(driver, vm); +} + + struct qemuProcessReconnectData { virQEMUDriverPtr driver; virDomainObjPtr obj; @@ -7958,6 +8022,9 @@ qemuProcessReconnect(void *opaque) qemuBlockNodeNamesDetect(driver, obj, QEMU_ASYNC_JOB_NONE) < 0) goto error; + if (qemuProcessRefreshBlockjobs(driver, obj) < 0) + goto error; + if (qemuRefreshVirtioChannelState(driver, obj, QEMU_ASYNC_JOB_NONE) < = 0) goto error; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634582655970.7290111600047; Wed, 12 Dec 2018 09:09:42 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5A2E030917A1; Wed, 12 Dec 2018 17:09:41 +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 1CA4A60C64; Wed, 12 Dec 2018 17:09:41 +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 B65143F60B; Wed, 12 Dec 2018 17:09:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9PKh031836 for ; Wed, 12 Dec 2018 12:09:25 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9279460139; Wed, 12 Dec 2018 17:09:25 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id E4B426012D; Wed, 12 Dec 2018 17:09:24 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:29 +0100 Message-Id: <754b4bb819062b3505dd16815c910a0bfc83a68a.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 13/51] qemu: driver: Remove block job status reprobing from qemuDomainBlockPivot 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Wed, 12 Dec 2018 17:09:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Now that we reprobe the status of blockjobs when reconnecting in addition to handling job status events, the status reprobing can be removed as we always track the correct status internally. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_driver.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d06eabb265..0598f6e5c7 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17090,9 +17090,8 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, const char *device, virDomainDiskDefPtr disk) { - int ret =3D -1, rc; + int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMonitorBlockJobInfo info; virStorageSourcePtr oldsrc =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); @@ -17103,23 +17102,6 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver, goto cleanup; } - /* Probe the status, if needed. */ - if (!disk->mirrorState) { - qemuDomainObjEnterMonitor(driver, vm); - rc =3D qemuMonitorGetBlockJobInfo(priv->mon, disk->info.alias, &in= fo); - if (qemuDomainObjExitMonitor(driver, vm) < 0) - goto cleanup; - if (rc < 0) - goto cleanup; - if (rc =3D=3D 1 && - (info.ready =3D=3D 1 || - (info.ready =3D=3D -1 && - info.end =3D=3D info.cur && - (info.type =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_COPY || - info.type =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT)))) - disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_READY; - } - if (disk->mirrorState !=3D VIR_DOMAIN_DISK_MIRROR_STATE_READY) { virReportError(VIR_ERR_BLOCK_COPY_ACTIVE, _("disk '%s' not ready for pivot yet"), --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634587950990.2100405399294; Wed, 12 Dec 2018 09:09:47 -0800 (PST) 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 B4876356F8; Wed, 12 Dec 2018 17:09:46 +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 7838E60141; Wed, 12 Dec 2018 17:09: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 2E62F3F60B; Wed, 12 Dec 2018 17:09:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9QQh031842 for ; Wed, 12 Dec 2018 12:09:26 -0500 Received: by smtp.corp.redhat.com (Postfix) id 8F64C60139; Wed, 12 Dec 2018 17:09:26 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id E14A26012D; Wed, 12 Dec 2018 17:09:25 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:30 +0100 Message-Id: <37db38094853aab3760f7f46e70d72eb006ce5be.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 14/51] qemu: migration: Simplify cancellation of migration blockjobs 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 12 Dec 2018 17:09:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" When cancelling job after a reconnect we can now use the disk block job state rather than having to re-detect it in the migration code. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_migration.c | 63 +++++++++++---------------------------- 1 file changed, 18 insertions(+), 45 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 5d2eb60f03..5f4fcb4bad 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -678,7 +678,9 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr drive= r, * @check: if true report an error when some of the mirrors fails * * Cancel all drive-mirrors started by qemuMigrationSrcNBDStorageCopy. - * Any pending block job events for the affected disks will be processed. + * Any pending block job events for the affected disks will be processed a= nd + * synchronous block job terminated regardless of return value unless qemu + * has crashed. * * Returns 0 on success, -1 otherwise. */ @@ -701,6 +703,11 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); + if (!diskPriv->blockjob->started) { + qemuBlockJobSyncEndDisk(vm, asyncJob, disk); + diskPriv->migrating =3D false; + } + if (!diskPriv->migrating) continue; @@ -5345,7 +5352,6 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv =3D vm->privateData; - virHashTablePtr blockJobs =3D NULL; bool storage =3D false; size_t i; int ret =3D -1; @@ -5353,67 +5359,34 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, VIR_DEBUG("Canceling unfinished outgoing migration of domain %s", vm->def->name); - for (i =3D 0; i < vm->def->ndisks; i++) { - virDomainDiskDefPtr disk =3D vm->def->disks[i]; - if (QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating) { - qemuBlockJobSyncBeginDisk(disk); - storage =3D true; - } - } - qemuDomainObjEnterMonitor(driver, vm); - ignore_value(qemuMonitorMigrateCancel(priv->mon)); - if (storage) - blockJobs =3D qemuMonitorGetAllBlockJobInfo(priv->mon); - - if (qemuDomainObjExitMonitor(driver, vm) < 0 || (storage && !blockJobs= )) - goto endsyncjob; - - if (!storage) { - ret =3D 0; + if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; - } for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - if (!diskPriv->migrating) - continue; - - if (virHashLookup(blockJobs, disk->info.alias)) { - VIR_DEBUG("Drive mirror on disk %s is still running", disk->ds= t); - } else { - VIR_DEBUG("Drive mirror on disk %s is gone", disk->dst); - qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_NONE, disk); + if (!diskPriv->blockjob->started) diskPriv->migrating =3D false; + + if (diskPriv->migrating) { + qemuBlockJobSyncBeginDisk(disk); + storage =3D true; } } - if (qemuMigrationSrcNBDCopyCancel(driver, vm, false, + + if (storage && + qemuMigrationSrcNBDCopyCancel(driver, vm, false, QEMU_ASYNC_JOB_NONE, NULL) < 0) - goto endsyncjob; + goto cleanup; ret =3D 0; cleanup: - virHashFree(blockJobs); return ret; - - endsyncjob: - if (storage) { - for (i =3D 0; i < vm->def->ndisks; i++) { - virDomainDiskDefPtr disk =3D vm->def->disks[i]; - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE= (disk); - - if (diskPriv->migrating) { - qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_NONE, disk); - diskPriv->migrating =3D false; - } - } - } - goto cleanup; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634600747272.0019847834699; Wed, 12 Dec 2018 09:10:00 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7689DC005F93; Wed, 12 Dec 2018 17:09:59 +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 2A2FB60C70; Wed, 12 Dec 2018 17:09:59 +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 D12BE3F5CB; Wed, 12 Dec 2018 17:09:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9TU0031867 for ; Wed, 12 Dec 2018 12:09:29 -0500 Received: by smtp.corp.redhat.com (Postfix) id AC74C60139; Wed, 12 Dec 2018 17:09:29 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0A6856012D; Wed, 12 Dec 2018 17:09:26 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:31 +0100 Message-Id: <271c5be11e0efd58cba44014bd9bf03b18d97b90.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 15/51] qemu: blockjob: Turn struct qemuBlockJobData into a virObject 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 12 Dec 2018 17:10:00 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Reference counting will simplify semantics of the lifecycle of the object. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 33 ++++++++++++++++++++++++++++----- src/qemu/qemu_blockjob.h | 5 +++-- src/qemu/qemu_domain.c | 4 ++-- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index a7cdc3c068..cf1710a0e8 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -42,14 +42,37 @@ VIR_LOG_INIT("qemu.qemu_blockjob"); -void -qemuBlockJobDataFree(qemuBlockJobDataPtr job) +static virClassPtr qemuBlockJobDataClass; + + +static void +qemuBlockJobDataDispose(void *obj) { - if (!job) - return; + qemuBlockJobDataPtr job =3D obj; VIR_FREE(job->errmsg); - VIR_FREE(job); +} + + +static int +qemuBlockJobDataOnceInit(void) +{ + if (!VIR_CLASS_NEW(qemuBlockJobData, virClassForObject())) + return -1; + + return 0; +} + + +VIR_ONCE_GLOBAL_INIT(qemuBlockJobData) + +qemuBlockJobDataPtr +qemuBlockJobDataNew(void) +{ + if (qemuBlockJobDataInitialize() < 0) + return NULL; + + return virObjectNew(qemuBlockJobDataClass); } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 1479c6f720..de1ad7039d 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -30,6 +30,8 @@ typedef struct _qemuBlockJobData qemuBlockJobData; typedef qemuBlockJobData *qemuBlockJobDataPtr; struct _qemuBlockJobData { + virObject parent; + bool started; int type; int status; @@ -37,8 +39,7 @@ struct _qemuBlockJobData { bool synchronous; /* API call is waiting for this job */ }; -void -qemuBlockJobDataFree(qemuBlockJobDataPtr job); +qemuBlockJobDataPtr qemuBlockJobDataNew(void); int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5a64231f95..9c3ab426bd 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1062,7 +1062,7 @@ qemuDomainDiskPrivateNew(void) if (!(priv =3D virObjectNew(qemuDomainDiskPrivateClass))) return NULL; - if (VIR_ALLOC(priv->blockjob) < 0) { + if (!(priv->blockjob =3D qemuBlockJobDataNew())) { virObjectUnref(priv); priv =3D NULL; } @@ -1078,7 +1078,7 @@ qemuDomainDiskPrivateDispose(void *obj) virStorageSourceFree(priv->migrSource); VIR_FREE(priv->qomName); VIR_FREE(priv->nodeCopyOnRead); - qemuBlockJobDataFree(priv->blockjob); + virObjectUnref(priv->blockjob); } static virClassPtr qemuDomainStorageSourcePrivateClass; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634587067418.91672791126405; Wed, 12 Dec 2018 09:09:47 -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 5A11E30013B2; Wed, 12 Dec 2018 17:09:45 +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 26AFE5D762; Wed, 12 Dec 2018 17:09: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 D1093181BA1A; Wed, 12 Dec 2018 17:09:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9UVw031881 for ; Wed, 12 Dec 2018 12:09:30 -0500 Received: by smtp.corp.redhat.com (Postfix) id A84566012E; Wed, 12 Dec 2018 17:09:30 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 05EFA6012D; Wed, 12 Dec 2018 17:09:29 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:32 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 16/51] qemu: blockjob: Clarify that job 'status' field contains new state 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.44]); Wed, 12 Dec 2018 17:09:46 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The field is used to note the state the job has transitioned to while handling the blockjob state change event. Rename the field so that it's obvious that this is the new state and not the general state of the blockjob. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 12 ++++++------ src/qemu/qemu_blockjob.h | 3 ++- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_process.c | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index cf1710a0e8..252f1640b2 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -261,22 +261,22 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, { qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; qemuDomainObjPrivatePtr priv =3D vm->privateData; - int status =3D job->status; + int state =3D job->newstate; if (error) *error =3D NULL; - if (status !=3D -1) { + if (state !=3D -1) { qemuBlockJobEventProcessLegacy(priv->driver, vm, disk, asyncJob, - job->type, status); - job->status =3D -1; + job->type, state); + job->newstate =3D -1; if (error) VIR_STEAL_PTR(*error, job->errmsg); else VIR_FREE(job->errmsg); } - return status; + return state; } @@ -300,7 +300,7 @@ qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) VIR_DEBUG("disk=3D%s", disk->dst); job->synchronous =3D true; - job->status =3D -1; + job->newstate =3D -1; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index de1ad7039d..7761eee6ae 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -34,9 +34,10 @@ struct _qemuBlockJobData { bool started; int type; - int status; char *errmsg; bool synchronous; /* API call is waiting for this job */ + + int newstate; /* virConnectDomainEventBlockJobStatus - new state to be= processed */ }; qemuBlockJobDataPtr qemuBlockJobDataNew(void); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0598f6e5c7..637307806b 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4734,7 +4734,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; job->type =3D type; - job->status =3D status; + job->newstate =3D status; qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 471e11115f..2cead713f6 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -942,7 +942,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, if (job->synchronous) { /* We have a SYNC API waiting for this event, dispatch it back */ job->type =3D type; - job->status =3D status; + job->newstate =3D status; VIR_FREE(job->errmsg); ignore_value(VIR_STRDUP_QUIET(job->errmsg, error)); virDomainObjBroadcast(vm); @@ -7782,7 +7782,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload, } job->started =3D true; - job->status =3D -1; + job->newstate =3D -1; return 0; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634607341648.1852742645773; Wed, 12 Dec 2018 09:10:07 -0800 (PST) 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 9CB5A308403C; Wed, 12 Dec 2018 17:10:04 +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 1E4B26013A; Wed, 12 Dec 2018 17:10:04 +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 BE2561888BC0; Wed, 12 Dec 2018 17:10:03 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9VK8031891 for ; Wed, 12 Dec 2018 12:09:31 -0500 Received: by smtp.corp.redhat.com (Postfix) id A49FE6012D; Wed, 12 Dec 2018 17:09:31 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 02D156012B; Wed, 12 Dec 2018 17:09:30 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:33 +0100 Message-Id: <96b3226b75ad7877903d9d8ee298005b9554905f.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 17/51] qemu: migration: Separate startup of disk mirror from migration logic 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Wed, 12 Dec 2018 17:10:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Extract the disk mirroring startup code from the loop into a separate function to allow cleaner cleanup paths. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_migration.c | 85 +++++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 30 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 5f4fcb4bad..9d165e27aa 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -890,6 +890,58 @@ qemuMigrationSrcNBDStorageCopyDriveMirror(virQEMUDrive= rPtr driver, } +static int +qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDiskDefPtr disk, + const char *host, + int port, + unsigned long long mirror_speed, + unsigned int mirror_flags, + const char *tlsAlias, + unsigned int flags) +{ + qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + char *diskAlias =3D NULL; + int rc; + int ret =3D -1; + + if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) + goto cleanup; + + qemuBlockJobSyncBeginDisk(disk); + + if (flags & VIR_MIGRATE_TLS) { + rc =3D qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, + disk, diskAlias, + host, port, + mirror_speed, + mirror_flags, + tlsAlias); + } else { + rc =3D qemuMigrationSrcNBDStorageCopyDriveMirror(driver, vm, diskA= lias, + host, port, + mirror_speed, + mirror_flags); + } + + if (rc < 0) { + qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_MIGRATION_OUT, disk); + goto cleanup; + } + + VIR_FREE(diskAlias); + diskPriv->migrating =3D true; + diskPriv->blockjob->started =3D true; + + ret =3D 0; + + cleanup: + VIR_FREE(diskAlias); + return ret; +} + + /** * qemuMigrationSrcNBDStorageCopy: * @driver: qemu driver @@ -926,7 +978,6 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr driver, int ret =3D -1; int port; size_t i; - char *diskAlias =3D NULL; unsigned long long mirror_speed =3D speed; unsigned int mirror_flags =3D VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT; int rv; @@ -951,40 +1002,15 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr driv= er, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - int rc; /* check whether disk should be migrated */ if (!qemuMigrationAnyCopyDisk(disk, nmigrate_disks, migrate_disks)) continue; - if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) - goto cleanup; - - qemuBlockJobSyncBeginDisk(disk); - - if (flags & VIR_MIGRATE_TLS) { - rc =3D qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, - disk, diskAlias, - host, port, - mirror_speed, - mirror_flags, - tlsAlias); - } else { - rc =3D qemuMigrationSrcNBDStorageCopyDriveMirror(driver, vm, d= iskAlias, - host, port, - mirror_speed, - mirror_flags); - } - - if (rc < 0) { - qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_MIGRATION_OUT, disk= ); + if (qemuMigrationSrcNBDStorageCopyOne(driver, vm, disk, host, port, + mirror_speed, mirror_flags, + tlsAlias, flags) < 0) goto cleanup; - } - - VIR_FREE(diskAlias); - diskPriv->migrating =3D true; - diskPriv->blockjob->started =3D true; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver-= >caps) < 0) { VIR_WARN("Failed to save status on vm %s", vm->def->name); @@ -1024,7 +1050,6 @@ qemuMigrationSrcNBDStorageCopy(virQEMUDriverPtr drive= r, cleanup: virObjectUnref(cfg); - VIR_FREE(diskAlias); return ret; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634592724863.7610323811705; Wed, 12 Dec 2018 09:09:52 -0800 (PST) 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 519847F6C5; Wed, 12 Dec 2018 17:09:51 +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 12CF56012E; Wed, 12 Dec 2018 17:09:51 +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 BBDD63F609; Wed, 12 Dec 2018 17:09:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9WiU031896 for ; Wed, 12 Dec 2018 12:09:32 -0500 Received: by smtp.corp.redhat.com (Postfix) id A281D6012D; Wed, 12 Dec 2018 17:09:32 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id F1DF16012B; Wed, 12 Dec 2018 17:09:31 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:34 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 18/51] qemu: blockjob: Add functions for block job state control 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 12 Dec 2018 17:09:52 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Rather than direclty modifying fields in the qemuBlockJobDataPtr structure add a bunch of fields which allow to do the transitions. This will help later when adding more complexity to the job handing. APIs introduced in this patch are: qemuBlockJobDiskNew - prepare for starting a new blockjob on a disk qemuBlockJobDiskGetJob - get the block job data structure for a disk For individual job state manipulation the following APIs are added: qemuBlockJobStarted - Sets the job as started with qemu. Until that the job can be cancelled without asking qemu. qemuBlockJobStartupFinalize - finalize job startup. If the job was started in qemu already, just releases reference to the job object. Otherwise clears everything as if the job was never started. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 81 +++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_blockjob.h | 19 +++++++++ src/qemu/qemu_driver.c | 31 ++++++++++++--- src/qemu/qemu_migration.c | 7 +++- src/qemu/qemu_process.c | 17 ++++---- 5 files changed, 141 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 252f1640b2..a3dc231b32 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -76,6 +76,87 @@ qemuBlockJobDataNew(void) } +static void +qemuBlockJobDataReset(qemuBlockJobDataPtr job) +{ + job->started =3D false; + job->type =3D -1; + job->newstate =3D -1; + VIR_FREE(job->errmsg); + job->synchronous =3D false; +} + + +/** + * qemuBlockJobDiskNew: + * @disk: disk definition + * + * Start/associate a new blockjob with @disk. + * + * Returns 0 on success and -1 on failure. + */ +qemuBlockJobDataPtr +qemuBlockJobDiskNew(virDomainDiskDefPtr disk) +{ + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + qemuBlockJobDataReset(job); + return virObjectRef(job); +} + + +/** + * qemuBlockJobDiskGetJob: + * @disk: disk definition + * + * Get a reference to the block job data object associated with @disk. + */ +qemuBlockJobDataPtr +qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk) +{ + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + if (!job) + return NULL; + + return virObjectRef(job); +} + + +/** + * qemuBlockJobStarted: + * @job: job data + * + * Mark @job as started in qemu. + */ +void +qemuBlockJobStarted(qemuBlockJobDataPtr job) +{ + job->started =3D true; +} + + +/** + * qemuBlockJobStartupFinalize: + * @job: job being started + * + * Cancels and clears the job private data if the job was not started with + * qemu (see qemuBlockJobStarted) or just clears up the local reference + * to @job if it was started. + */ +void +qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job) +{ + if (!job) + return; + + if (!job->started) + qemuBlockJobDataReset(job); + + virObjectUnref(job); +} + + /** * qemuBlockJobEmitEvents: * diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 7761eee6ae..3d1b389dec 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -42,6 +42,21 @@ struct _qemuBlockJobData { qemuBlockJobDataPtr qemuBlockJobDataNew(void); +qemuBlockJobDataPtr +qemuBlockJobDiskNew(virDomainDiskDefPtr disk) + ATTRIBUTE_NONNULL(1); + +qemuBlockJobDataPtr +qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk) + ATTRIBUTE_NONNULL(1); + +void +qemuBlockJobStarted(qemuBlockJobDataPtr job) + ATTRIBUTE_NONNULL(1); + +void +qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job); + int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, virDomainDiskDefPtr disk, @@ -52,4 +67,8 @@ void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, int asyncJob, virDomainDiskDefPtr disk); +qemuBlockJobDataPtr +qemuBlockJobGetByDisk(virDomainDiskDefPtr disk) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; + #endif /* __QEMU_BLOCKJOB_H__ */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 637307806b..9e5171744e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4716,7 +4716,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, int status) { virDomainDiskDefPtr disk; - qemuBlockJobDataPtr job; + qemuBlockJobDataPtr job =3D NULL; if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) return; @@ -4731,7 +4731,11 @@ processBlockJobEvent(virQEMUDriverPtr driver, goto endjob; } - job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + if (!(job =3D qemuBlockJobDiskGetJob(disk))) { + if (!(job =3D qemuBlockJobDiskNew(disk))) + goto endjob; + qemuBlockJobStarted(job); + } job->type =3D type; job->newstate =3D status; @@ -4739,6 +4743,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); endjob: + qemuBlockJobStartupFinalize(job); qemuDomainObjEndJob(driver, vm); } @@ -17197,6 +17202,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, char *basePath =3D NULL; char *backingPath =3D NULL; unsigned long long speed =3D bandwidth; + qemuBlockJobDataPtr job =3D NULL; int ret =3D -1; if (flags & VIR_DOMAIN_BLOCK_REBASE_RELATIVE && !base) { @@ -17263,6 +17269,9 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, speed <<=3D 20; } + if (!(job =3D qemuBlockJobDiskNew(disk))) + goto endjob; + qemuDomainObjEnterMonitor(driver, vm); if (baseSource) basePath =3D qemuMonitorDiskNameLookup(priv->mon, device, disk->sr= c, @@ -17276,7 +17285,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, if (ret < 0) goto endjob; - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->started =3D true; + qemuBlockJobStarted(job); if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after state change", @@ -17286,6 +17295,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, qemuDomainObjEndJob(driver, vm); cleanup: + qemuBlockJobStartupFinalize(job); virObjectUnref(cfg); VIR_FREE(basePath); VIR_FREE(backingPath); @@ -17663,6 +17673,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, const char *format =3D NULL; virErrorPtr monitor_error =3D NULL; bool reuse =3D !!(flags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT); + qemuBlockJobDataPtr job =3D NULL; /* Preliminaries: find the disk we are editing, sanity checks */ virCheckFlags(VIR_DOMAIN_BLOCK_COPY_SHALLOW | @@ -17786,6 +17797,9 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, goto endjob; } + if (!(job =3D qemuBlockJobDiskNew(disk))) + goto endjob; + /* Actually start the mirroring */ qemuDomainObjEnterMonitor(driver, vm); /* qemuMonitorDriveMirror needs to honor the REUSE_EXT flag as specifi= ed @@ -17802,12 +17816,12 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, } /* Update vm in place to match changes. */ + qemuBlockJobStarted(job); need_unlink =3D false; virStorageFileDeinit(mirror); disk->mirror =3D mirror; mirror =3D NULL; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_COPY; - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->started =3D true; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after state change", @@ -17822,6 +17836,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, virSetError(monitor_error); virFreeError(monitor_error); } + qemuBlockJobStartupFinalize(job); cleanup: VIR_FREE(device); @@ -18032,6 +18047,7 @@ qemuDomainBlockCommit(virDomainPtr dom, char *backingPath =3D NULL; virStorageSourcePtr mirror =3D NULL; unsigned long long speed =3D bandwidth; + qemuBlockJobDataPtr job =3D NULL; /* XXX Add support for COMMIT_DELETE */ virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW | @@ -18192,6 +18208,10 @@ qemuDomainBlockCommit(virDomainPtr dom, disk->mirror =3D mirror; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT; } + + if (!(job =3D qemuBlockJobDiskNew(disk))) + goto endjob; + qemuDomainObjEnterMonitor(driver, vm); basePath =3D qemuMonitorDiskNameLookup(priv->mon, device, disk->src, baseSource); @@ -18207,7 +18227,7 @@ qemuDomainBlockCommit(virDomainPtr dom, } if (ret =3D=3D 0) { - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->started =3D true; + qemuBlockJobStarted(job); mirror =3D NULL; } else { disk->mirror =3D NULL; @@ -18232,6 +18252,7 @@ qemuDomainBlockCommit(virDomainPtr dom, } } virStorageSourceFree(mirror); + qemuBlockJobStartupFinalize(job); qemuDomainObjEndJob(driver, vm); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 9d165e27aa..79ad2efe75 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -902,6 +902,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, unsigned int flags) { qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + qemuBlockJobDataPtr job =3D NULL; char *diskAlias =3D NULL; int rc; int ret =3D -1; @@ -909,6 +910,9 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) goto cleanup; + if (!(job =3D qemuBlockJobDiskNew(disk))) + goto cleanup; + qemuBlockJobSyncBeginDisk(disk); if (flags & VIR_MIGRATE_TLS) { @@ -932,11 +936,12 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr dr= iver, VIR_FREE(diskAlias); diskPriv->migrating =3D true; - diskPriv->blockjob->started =3D true; + qemuBlockJobStarted(job); ret =3D 0; cleanup: + qemuBlockJobStartupFinalize(job); VIR_FREE(diskAlias); return ret; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 2cead713f6..b1fdbca15e 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -926,7 +926,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, virQEMUDriverPtr driver =3D opaque; struct qemuProcessEvent *processEvent =3D NULL; virDomainDiskDefPtr disk; - qemuBlockJobDataPtr job; + qemuBlockJobDataPtr job =3D NULL; char *data =3D NULL; virObjectLock(vm); @@ -937,9 +937,9 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NU= LL))) goto cleanup; - job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + job =3D qemuBlockJobDiskGetJob(disk); - if (job->synchronous) { + if (job && job->synchronous) { /* We have a SYNC API waiting for this event, dispatch it back */ job->type =3D type; job->newstate =3D status; @@ -968,6 +968,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, } cleanup: + qemuBlockJobStartupFinalize(job); qemuProcessEventFree(processEvent); virObjectUnlock(vm); return 0; @@ -7764,7 +7765,6 @@ qemuProcessRefreshLegacyBlockjob(void *payload, virDomainObjPtr vm =3D opaque; qemuMonitorBlockJobInfoPtr info =3D payload; virDomainDiskDefPtr disk; - qemuDomainDiskPrivatePtr diskPriv; qemuBlockJobDataPtr job; if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, jobname, jobn= ame))) { @@ -7772,8 +7772,10 @@ qemuProcessRefreshLegacyBlockjob(void *payload, return 0; } - diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - job =3D diskPriv->blockjob; + if (!(job =3D qemuBlockJobDiskNew(disk))) + return -1; + + qemuBlockJobStarted(job); if (disk->mirror) { if (info->ready =3D=3D 1 || @@ -7781,8 +7783,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload, disk->mirrorState =3D VIR_DOMAIN_BLOCK_JOB_READY; } - job->started =3D true; - job->newstate =3D -1; + qemuBlockJobStartupFinalize(job); return 0; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 154463459730686.72708487361592; Wed, 12 Dec 2018 09:09:57 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CD8E13002949; Wed, 12 Dec 2018 17:09:55 +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 EAA9160C6A; Wed, 12 Dec 2018 17:09:54 +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 9E098181B9E4; Wed, 12 Dec 2018 17:09:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9XqV031909 for ; Wed, 12 Dec 2018 12:09:33 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9FC186013B; Wed, 12 Dec 2018 17:09:33 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id EF5FF6012B; Wed, 12 Dec 2018 17:09:32 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:35 +0100 Message-Id: <9c1a45f8fe6e6d100985bc0d907e7daf0a737c1b.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 19/51] qemu: blockjob: Drop unnecessary calls to qemuBlockJobSyncEndDisk 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 12 Dec 2018 17:09:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" If the job wasn't started, we don't need to end the synchronous job. Add a note and drop the unnecessary calls. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 4 +++- src/qemu/qemu_migration.c | 8 ++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index a3dc231b32..17657a9d9b 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -391,7 +391,9 @@ qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) * @disk: domain disk * * End a synchronous block job for @disk. Any pending block job event - * for the disk is processed. + * for the disk is processed. Note that it's not necessary to call this fu= nction + * in case the block job was not started successfully if + * qemuBlockJobStartupFinalize will be called. */ void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 79ad2efe75..dbf35b0829 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -703,10 +703,8 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - if (!diskPriv->blockjob->started) { - qemuBlockJobSyncEndDisk(vm, asyncJob, disk); + if (!diskPriv->blockjob->started) diskPriv->migrating =3D false; - } if (!diskPriv->migrating) continue; @@ -929,10 +927,8 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr dri= ver, mirror_flags); } - if (rc < 0) { - qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_MIGRATION_OUT, disk); + if (rc < 0) goto cleanup; - } VIR_FREE(diskAlias); diskPriv->migrating =3D true; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634590711124.75662461273635; Wed, 12 Dec 2018 09:09:50 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 61F97307D874; Wed, 12 Dec 2018 17:09:49 +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 29BBB5ED5A; Wed, 12 Dec 2018 17:09:49 +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 CB5D61843669; Wed, 12 Dec 2018 17:09:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9axT031927 for ; Wed, 12 Dec 2018 12:09:36 -0500 Received: by smtp.corp.redhat.com (Postfix) id AA2D66012B; Wed, 12 Dec 2018 17:09:36 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 05BF96012E; Wed, 12 Dec 2018 17:09:33 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:36 +0100 Message-Id: <1418d65b773becd9b6fae946b66d2eb8e1474d8c.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 20/51] qemu: blockjob: Add reference to disk into struct qemuBlockJobData 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Wed, 12 Dec 2018 17:09:50 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Block jobs can also happen on objects which are not a disk at a given point (e.g. the frontend was not hotplugged yet) and thus will be eventually kept separately. Add a reference back to the disk for blockjobs which do correspond to a disk. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 1 + src/qemu/qemu_blockjob.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 17657a9d9b..7bbe582722 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -99,6 +99,7 @@ qemuBlockJobDataPtr qemuBlockJobDiskNew(virDomainDiskDefPtr disk) { qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + job->disk =3D disk; qemuBlockJobDataReset(job); return virObjectRef(job); diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 3d1b389dec..feaee4dee3 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -32,6 +32,8 @@ typedef qemuBlockJobData *qemuBlockJobDataPtr; struct _qemuBlockJobData { virObject parent; + virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not corrspo= nd to any disk */ + bool started; int type; char *errmsg; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634611437510.6230562794051; Wed, 12 Dec 2018 09:10:11 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DE5433003D2C; Wed, 12 Dec 2018 17:10:09 +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 3A03061477; Wed, 12 Dec 2018 17:10:09 +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 A8FBB3D39B; Wed, 12 Dec 2018 17:10:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9bS8031937 for ; Wed, 12 Dec 2018 12:09:37 -0500 Received: by smtp.corp.redhat.com (Postfix) id A3A096012E; Wed, 12 Dec 2018 17:09:37 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 00DD26012B; Wed, 12 Dec 2018 17:09:36 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:37 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 21/51] qemu: blockjob: Record job type when starting the job 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Wed, 12 Dec 2018 17:10:10 +0000 (UTC) Content-Type: text/plain; charset="utf-8" We can properly track the job type when starting the job so that we don't have to infer it later. This patch also adds an enum of block job types specific to qemu (qemuBlockjobType) which mirrors the public block job types (virDomainBlockJobType) but allows for other types to be added later which will not be public. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 10 +++++----- src/qemu/qemu_blockjob.h | 20 ++++++++++++++++++-- src/qemu/qemu_driver.c | 11 ++++++----- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_process.c | 8 ++++++-- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 7bbe582722..531de035af 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -96,12 +96,16 @@ qemuBlockJobDataReset(qemuBlockJobDataPtr job) * Returns 0 on success and -1 on failure. */ qemuBlockJobDataPtr -qemuBlockJobDiskNew(virDomainDiskDefPtr disk) +qemuBlockJobDiskNew(virDomainDiskDefPtr disk, + qemuBlockjobType type) { qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; job->disk =3D disk; qemuBlockJobDataReset(job); + + job->type =3D type; + return virObjectRef(job); } @@ -278,10 +282,6 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, type, status); - if (type =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT && - disk->mirrorJob =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT) - type =3D disk->mirrorJob; - qemuBlockJobEmitEvents(driver, vm, disk, type, status); /* If we completed a block pull or commit, then update the XML diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index feaee4dee3..6f6d0aa691 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -25,6 +25,21 @@ # include "internal.h" # include "qemu_conf.h" +/** + * This enum has to map all known block job types from enum virDomainBlock= JobType + * to the same values. All internal blockjobs can be mapped after and don't + * need to have stable values. + */ +typedef enum { + QEMU_BLOCKJOB_TYPE_NONE =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN, + QEMU_BLOCKJOB_TYPE_PULL =3D VIR_DOMAIN_BLOCK_JOB_TYPE_PULL, + QEMU_BLOCKJOB_TYPE_COPY =3D VIR_DOMAIN_BLOCK_JOB_TYPE_COPY, + QEMU_BLOCKJOB_TYPE_COMMIT =3D VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT, + QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT =3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_= COMMIT, + QEMU_BLOCKJOB_TYPE_INTERNAL, + QEMU_BLOCKJOB_TYPE_LAST +} qemuBlockjobType; +verify((int)QEMU_BLOCKJOB_TYPE_INTERNAL =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_L= AST); typedef struct _qemuBlockJobData qemuBlockJobData; typedef qemuBlockJobData *qemuBlockJobDataPtr; @@ -35,7 +50,7 @@ struct _qemuBlockJobData { virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not corrspo= nd to any disk */ bool started; - int type; + int type; /* qemuBlockjobType */ char *errmsg; bool synchronous; /* API call is waiting for this job */ @@ -45,7 +60,8 @@ struct _qemuBlockJobData { qemuBlockJobDataPtr qemuBlockJobDataNew(void); qemuBlockJobDataPtr -qemuBlockJobDiskNew(virDomainDiskDefPtr disk) +qemuBlockJobDiskNew(virDomainDiskDefPtr disk, + qemuBlockjobType type) ATTRIBUTE_NONNULL(1); qemuBlockJobDataPtr diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 9e5171744e..5eace06099 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4732,12 +4732,11 @@ processBlockJobEvent(virQEMUDriverPtr driver, } if (!(job =3D qemuBlockJobDiskGetJob(disk))) { - if (!(job =3D qemuBlockJobDiskNew(disk))) + if (!(job =3D qemuBlockJobDiskNew(disk, type))) goto endjob; qemuBlockJobStarted(job); } - job->type =3D type; job->newstate =3D status; qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); @@ -17269,7 +17268,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, speed <<=3D 20; } - if (!(job =3D qemuBlockJobDiskNew(disk))) + if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL))) goto endjob; qemuDomainObjEnterMonitor(driver, vm); @@ -17797,7 +17796,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, goto endjob; } - if (!(job =3D qemuBlockJobDiskNew(disk))) + if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) goto endjob; /* Actually start the mirroring */ @@ -18048,6 +18047,7 @@ qemuDomainBlockCommit(virDomainPtr dom, virStorageSourcePtr mirror =3D NULL; unsigned long long speed =3D bandwidth; qemuBlockJobDataPtr job =3D NULL; + qemuBlockjobType jobtype =3D QEMU_BLOCKJOB_TYPE_COMMIT; /* XXX Add support for COMMIT_DELETE */ virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW | @@ -18207,9 +18207,10 @@ qemuDomainBlockCommit(virDomainPtr dom, disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirror =3D mirror; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT; + jobtype =3D QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT; } - if (!(job =3D qemuBlockJobDiskNew(disk))) + if (!(job =3D qemuBlockJobDiskNew(disk, jobtype))) goto endjob; qemuDomainObjEnterMonitor(driver, vm); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index dbf35b0829..837ed39efe 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -908,7 +908,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) goto cleanup; - if (!(job =3D qemuBlockJobDiskNew(disk))) + if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) goto cleanup; qemuBlockJobSyncBeginDisk(disk); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index b1fdbca15e..91c99a2a11 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -941,7 +941,6 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, if (job && job->synchronous) { /* We have a SYNC API waiting for this event, dispatch it back */ - job->type =3D type; job->newstate =3D status; VIR_FREE(job->errmsg); ignore_value(VIR_STRDUP_QUIET(job->errmsg, error)); @@ -7766,13 +7765,18 @@ qemuProcessRefreshLegacyBlockjob(void *payload, qemuMonitorBlockJobInfoPtr info =3D payload; virDomainDiskDefPtr disk; qemuBlockJobDataPtr job; + virDomainBlockJobType jobtype =3D info->type; if (!(disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, jobname, jobn= ame))) { VIR_DEBUG("could not find disk for block job '%s'", jobname); return 0; } - if (!(job =3D qemuBlockJobDiskNew(disk))) + if (jobtype =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT && + disk->mirrorJob =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT) + jobtype =3D disk->mirrorJob; + + if (!(job =3D qemuBlockJobDiskNew(disk, jobtype))) return -1; qemuBlockJobStarted(job); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634595181857.0201094502281; Wed, 12 Dec 2018 09:09:55 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6732CCA377; Wed, 12 Dec 2018 17:09:53 +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 3233860C67; Wed, 12 Dec 2018 17:09:53 +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 D68523F617; Wed, 12 Dec 2018 17:09:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9cgi031944 for ; Wed, 12 Dec 2018 12:09:38 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9F3556013D; Wed, 12 Dec 2018 17:09:38 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id F05696012E; Wed, 12 Dec 2018 17:09:37 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:38 +0100 Message-Id: <34411f8d251a2ff72771e7031179fd478dea2e54.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 22/51] qemu: blockjob: Pass in job to qemuBlockJobEventProcessLegacy 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 12 Dec 2018 17:09:54 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Don't split out individual fields, just pass in the job. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 531de035af..c6b70c5388 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -257,9 +257,7 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPt= r driver, * qemuBlockJobEventProcessLegacy: * @driver: qemu driver * @vm: domain - * @disk: domain disk - * @type: block job type - * @status: block job status + * @job: job to process events for * * Update disk's mirror state in response to a block job event * from QEMU. For mirror state's that must survive libvirt @@ -268,25 +266,24 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriver= Ptr driver, static void qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDiskDefPtr disk, - int asyncJob, - int type, - int status) + qemuBlockJobDataPtr job, + int asyncJob) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + virDomainDiskDefPtr disk =3D job->disk; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - VIR_DEBUG("disk=3D%s, mirrorState=3D%s, type=3D%d, status=3D%d", + VIR_DEBUG("disk=3D%s, mirrorState=3D%s, type=3D%d, newstate=3D%d", disk->dst, NULLSTR(virDomainDiskMirrorStateTypeToString(disk->mirrorSta= te)), - type, - status); + job->type, + job->newstate); - qemuBlockJobEmitEvents(driver, vm, disk, type, status); + qemuBlockJobEmitEvents(driver, vm, disk, job->type, job->newstate); /* If we completed a block pull or commit, then update the XML * to match. */ - switch ((virConnectDomainEventBlockJobStatus) status) { + switch ((virConnectDomainEventBlockJobStatus) job->newstate) { case VIR_DOMAIN_BLOCK_JOB_COMPLETED: qemuBlockJobEventProcessLegacyCompleted(driver, vm, disk, asyncJob= ); break; @@ -314,7 +311,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after block job", vm->def= ->name); - if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_COMPLETED && vm->newDef) { + if (job->newstate =3D=3D VIR_DOMAIN_BLOCK_JOB_COMPLETED && vm->newDef)= { if (virDomainSaveConfig(cfg->configDir, driver->caps, vm->newDef) = < 0) VIR_WARN("Unable to update persistent definition on vm %s " "after block job", vm->def->name); @@ -349,8 +346,7 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, *error =3D NULL; if (state !=3D -1) { - qemuBlockJobEventProcessLegacy(priv->driver, vm, disk, asyncJob, - job->type, state); + qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob); job->newstate =3D -1; if (error) VIR_STEAL_PTR(*error, job->errmsg); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634598662483.0587069274834; Wed, 12 Dec 2018 09:09:58 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5319E30C419C; Wed, 12 Dec 2018 17:09:57 +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 0BF8260C64; Wed, 12 Dec 2018 17:09:57 +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 B78241888BB0; Wed, 12 Dec 2018 17:09:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9dVb031954 for ; Wed, 12 Dec 2018 12:09:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9CAF16013A; Wed, 12 Dec 2018 17:09:39 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id ED3176012D; Wed, 12 Dec 2018 17:09:38 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:39 +0100 Message-Id: <8cf0e89324400afa0fcdf3b2acb9af65dbd16a4f.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 23/51] qemu: blockjob: Convert qemuBlockJobSyncBeginDisk to work with the job 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Wed, 12 Dec 2018 17:09:58 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Modify qemuBlockJobSyncBeginDisk to operate on qemuBlockt sJobDataPtr and rename it accordingly. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 11 +++++++---- src/qemu/qemu_blockjob.h | 2 +- src/qemu/qemu_driver.c | 10 +++++++++- src/qemu/qemu_migration.c | 11 +++++++---- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index c6b70c5388..0b2c667dae 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -359,7 +359,7 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, /** - * qemuBlockJobSyncBeginDisk: + * qemuBlockJobSyncBegin: * @disk: domain disk * * Begin a new synchronous block job for @disk. The synchronous @@ -372,11 +372,14 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, * is called. */ void -qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk) +qemuBlockJobSyncBegin(qemuBlockJobDataPtr job) { - qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + const char *diskdst =3D NULL; - VIR_DEBUG("disk=3D%s", disk->dst); + if (job->disk) + diskdst =3D job->disk->dst; + + VIR_DEBUG("disk=3D%s", NULLSTR(diskdst)); job->synchronous =3D true; job->newstate =3D -1; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 6f6d0aa691..0c2ce46986 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -80,7 +80,7 @@ int qemuBlockJobUpdateDisk(virDomainObjPtr vm, virDomainDiskDefPtr disk, char **error); -void qemuBlockJobSyncBeginDisk(virDomainDiskDefPtr disk); +void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job); void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, int asyncJob, virDomainDiskDefPtr disk); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5eace06099..5fd92ca0c1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17316,6 +17316,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, bool save =3D false; bool pivot =3D !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT); bool async =3D !!(flags & VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC); + qemuBlockJobDataPtr job =3D NULL; virDomainObjPtr vm; int ret =3D -1; @@ -17343,6 +17344,12 @@ qemuDomainBlockJobAbort(virDomainPtr dom, if (!(device =3D qemuAliasDiskDriveFromDisk(disk))) goto endjob; + if (!(job =3D qemuBlockJobDiskGetJob(disk))) { + virReportError(VIR_ERR_INVALID_ARG, + _("disk %s does not have an active block job"), dis= k->dst); + goto endjob; + } + if (disk->mirrorState !=3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE && disk->mirrorState !=3D VIR_DOMAIN_DISK_MIRROR_STATE_READY) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -17352,7 +17359,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, } if (!async) - qemuBlockJobSyncBeginDisk(disk); + qemuBlockJobSyncBegin(job); if (pivot) { if ((ret =3D qemuDomainBlockPivot(driver, vm, device, disk)) < 0) @@ -17407,6 +17414,7 @@ qemuDomainBlockJobAbort(virDomainPtr dom, qemuDomainObjEndJob(driver, vm); cleanup: + virObjectUnref(job); virObjectUnref(cfg); VIR_FREE(device); virDomainObjEndAPI(&vm); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 837ed39efe..b9119c5b89 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -911,7 +911,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) goto cleanup; - qemuBlockJobSyncBeginDisk(disk); + qemuBlockJobSyncBegin(job); if (flags & VIR_MIGRATE_TLS) { rc =3D qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm, @@ -5393,16 +5393,19 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); + qemuBlockJobDataPtr job; - if (!diskPriv->blockjob->started) + if (!(job =3D qemuBlockJobDiskGetJob(disk)) || + !job->started) diskPriv->migrating =3D false; if (diskPriv->migrating) { - qemuBlockJobSyncBeginDisk(disk); + qemuBlockJobSyncBegin(job); storage =3D true; } - } + virObjectUnref(job); + } if (storage && qemuMigrationSrcNBDCopyCancel(driver, vm, false, --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634617273103.97696187043914; Wed, 12 Dec 2018 09:10:17 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6C482637FC; Wed, 12 Dec 2018 17:10:15 +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 2126E1057066; Wed, 12 Dec 2018 17:10:15 +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 B959F18A27BA; Wed, 12 Dec 2018 17:10:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9eYs031964 for ; Wed, 12 Dec 2018 12:09:40 -0500 Received: by smtp.corp.redhat.com (Postfix) id 980076013A; Wed, 12 Dec 2018 17:09:40 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id E93CE6012D; Wed, 12 Dec 2018 17:09:39 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:40 +0100 Message-Id: <047f77ece8611de95095308c8b3677e7f8ff77ee.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 24/51] qemu: blockjob: Track current state of blockjob 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 12 Dec 2018 17:10:16 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Add a field tracking the current state of job so that it can be queried later. Until now the job state e.g. that the job is _READY for finalizing was tracked only for mirror jobs. Add tracking of state for all jobs. Similarly to 'qemuBlockJobType' this maps the existing states of the blockjob from virConnectDomainEventBlockJobStatus to 'qemuBlockJobState' so that we can track some internal states as well. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 23 +++++++++++++++-------- src/qemu/qemu_blockjob.h | 22 +++++++++++++++++++++- src/qemu/qemu_domain.c | 5 +++-- src/qemu/qemu_driver.c | 3 +-- src/qemu/qemu_migration.c | 8 ++++++-- src/qemu/qemu_process.c | 4 +++- 6 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 0b2c667dae..e778e5b7ce 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -79,7 +79,6 @@ qemuBlockJobDataNew(void) static void qemuBlockJobDataReset(qemuBlockJobDataPtr job) { - job->started =3D false; job->type =3D -1; job->newstate =3D -1; VIR_FREE(job->errmsg); @@ -104,6 +103,7 @@ qemuBlockJobDiskNew(virDomainDiskDefPtr disk, qemuBlockJobDataReset(job); + job->state =3D QEMU_BLOCKJOB_STATE_NEW; job->type =3D type; return virObjectRef(job); @@ -137,7 +137,7 @@ qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk) void qemuBlockJobStarted(qemuBlockJobDataPtr job) { - job->started =3D true; + job->state =3D QEMU_BLOCKJOB_STATE_RUNNING; } @@ -155,13 +155,21 @@ qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job) if (!job) return; - if (!job->started) + if (job->state =3D=3D QEMU_BLOCKJOB_STATE_NEW) qemuBlockJobDataReset(job); virObjectUnref(job); } +bool +qemuBlockJobIsRunning(qemuBlockJobDataPtr job) +{ + return job->state =3D=3D QEMU_BLOCKJOB_STATE_RUNNING || + job->state =3D=3D QEMU_BLOCKJOB_STATE_READY; +} + + /** * qemuBlockJobEmitEvents: * @@ -195,7 +203,6 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPt= r driver, virDomainDiskDefPtr disk, int asyncJob) { - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); virDomainDiskDefPtr persistDisk =3D NULL; if (disk->mirrorState =3D=3D VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT) { @@ -249,7 +256,6 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPt= r driver, virStorageSourceBackingStoreClear(disk->src); ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); - diskPriv->blockjob->started =3D false; } @@ -271,12 +277,12 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr drive= r, { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); virDomainDiskDefPtr disk =3D job->disk; - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - VIR_DEBUG("disk=3D%s, mirrorState=3D%s, type=3D%d, newstate=3D%d", + VIR_DEBUG("disk=3D%s, mirrorState=3D%s, type=3D%d, state=3D%d, newstat= e=3D%d", disk->dst, NULLSTR(virDomainDiskMirrorStateTypeToString(disk->mirrorSta= te)), job->type, + job->state, job->newstate); qemuBlockJobEmitEvents(driver, vm, disk, job->type, job->newstate); @@ -301,13 +307,14 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr drive= r, } disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; - diskPriv->blockjob->started =3D false; break; case VIR_DOMAIN_BLOCK_JOB_LAST: break; } + job->state =3D job->newstate; + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after block job", vm->def= ->name); diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 0c2ce46986..67b9c94b64 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -25,6 +25,22 @@ # include "internal.h" # include "qemu_conf.h" +/** + * This enum has to map all known block job states from enum virDomainBloc= kJobType + * to the same values. All internal blockjobs can be mapped after and don't + * need to have stable values. + */ +typedef enum { + QEMU_BLOCKJOB_STATE_COMPLETED =3D VIR_DOMAIN_BLOCK_JOB_COMPLETED, + QEMU_BLOCKJOB_STATE_FAILED =3D VIR_DOMAIN_BLOCK_JOB_FAILED, + QEMU_BLOCKJOB_STATE_CANCELLED =3D VIR_DOMAIN_BLOCK_JOB_CANCELED, + QEMU_BLOCKJOB_STATE_READY =3D VIR_DOMAIN_BLOCK_JOB_READY, + QEMU_BLOCKJOB_STATE_NEW =3D VIR_DOMAIN_BLOCK_JOB_LAST, + QEMU_BLOCKJOB_STATE_RUNNING, + QEMU_BLOCKJOB_STATE_LAST +} qemuBlockjobState; +verify((int)QEMU_BLOCKJOB_STATE_NEW =3D=3D VIR_DOMAIN_BLOCK_JOB_LAST); + /** * This enum has to map all known block job types from enum virDomainBlock= JobType * to the same values. All internal blockjobs can be mapped after and don't @@ -49,8 +65,8 @@ struct _qemuBlockJobData { virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not corrspo= nd to any disk */ - bool started; int type; /* qemuBlockjobType */ + int state; /* qemuBlockjobState */ char *errmsg; bool synchronous; /* API call is waiting for this job */ @@ -72,6 +88,10 @@ void qemuBlockJobStarted(qemuBlockJobDataPtr job) ATTRIBUTE_NONNULL(1); +bool +qemuBlockJobIsRunning(qemuBlockJobDataPtr job) + ATTRIBUTE_NONNULL(1); + void qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 9c3ab426bd..01b4c97a91 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9261,7 +9261,7 @@ qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr di= sk) } if (diskPriv->blockjob && - diskPriv->blockjob->started) { + qemuBlockJobIsRunning(diskPriv->blockjob)) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("disk '%s' already in active block job"), disk->dst); @@ -9290,7 +9290,8 @@ qemuDomainHasBlockjob(virDomainObjPtr vm, virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - if (!copy_only && diskPriv->blockjob && diskPriv->blockjob->starte= d) + if (!copy_only && diskPriv->blockjob && + qemuBlockJobIsRunning(diskPriv->blockjob)) return true; if (disk->mirror && disk->mirrorJob =3D=3D VIR_DOMAIN_BLOCK_JOB_TY= PE_COPY) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5fd92ca0c1..f203f89521 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17397,9 +17397,8 @@ qemuDomainBlockJobAbort(virDomainPtr dom, * do the waiting while still holding the VM job, to prevent newly * scheduled block jobs from confusing us. */ if (!async) { - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); - while (diskPriv->blockjob->started) { + while (qemuBlockJobIsRunning(job)) { if (virDomainObjWait(vm) < 0) { ret =3D -1; goto endjob; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index b9119c5b89..bde8697ede 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -702,8 +702,10 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); + qemuBlockJobDataPtr job; - if (!diskPriv->blockjob->started) + if (!(job =3D qemuBlockJobDiskGetJob(disk)) || + !qemuBlockJobIsRunning(job)) diskPriv->migrating =3D false; if (!diskPriv->migrating) @@ -720,6 +722,8 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, qemuBlockJobSyncEndDisk(vm, asyncJob, disk); diskPriv->migrating =3D false; } + + virObjectUnref(job); } while ((rv =3D qemuMigrationSrcNBDCopyCancelled(vm, asyncJob, check)) = !=3D 1) { @@ -5396,7 +5400,7 @@ qemuMigrationSrcCancel(virQEMUDriverPtr driver, qemuBlockJobDataPtr job; if (!(job =3D qemuBlockJobDiskGetJob(disk)) || - !job->started) + !qemuBlockJobIsRunning(job)) diskPriv->migrating =3D false; if (diskPriv->migrating) { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 91c99a2a11..1171da62a8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7783,8 +7783,10 @@ qemuProcessRefreshLegacyBlockjob(void *payload, if (disk->mirror) { if (info->ready =3D=3D 1 || - (info->ready =3D=3D -1 && info->end =3D=3D info->cur)) + (info->ready =3D=3D -1 && info->end =3D=3D info->cur)) { disk->mirrorState =3D VIR_DOMAIN_BLOCK_JOB_READY; + job->state =3D VIR_DOMAIN_BLOCK_JOB_READY; + } } qemuBlockJobStartupFinalize(job); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 154463460553112.1409227699462; Wed, 12 Dec 2018 09:10:05 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7769231256B6; Wed, 12 Dec 2018 17:10:01 +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 231065FC2E; Wed, 12 Dec 2018 17:10:01 +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 CE35F3F5DD; Wed, 12 Dec 2018 17:10:00 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9hA2031984 for ; Wed, 12 Dec 2018 12:09:43 -0500 Received: by smtp.corp.redhat.com (Postfix) id 79BF760139; Wed, 12 Dec 2018 17:09:43 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id CB99E6013A; Wed, 12 Dec 2018 17:09:40 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:41 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 25/51] qemu: migration: Extract reporting of disk migration error 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 12 Dec 2018 17:10:04 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The same message is reported in 3 distinct places. Move it out into a single function. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_migration.c | 43 ++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index bde8697ede..1ce7863460 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -463,6 +463,21 @@ qemuMigrationDstStopNBDServer(virQEMUDriverPtr driver, } +static void +qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk, + const char *errmsg) +{ + if (errmsg) { + virReportError(VIR_ERR_OPERATION_FAILED, + _("migration of disk %s failed: %s"), + disk->dst, errmsg); + } else { + virReportError(VIR_ERR_OPERATION_FAILED, + _("migration of disk %s failed"), disk->dst); + } +} + + /** * qemuMigrationSrcNBDStorageCopyReady: * @vm: domain @@ -492,15 +507,7 @@ qemuMigrationSrcNBDStorageCopyReady(virDomainObjPtr vm, status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_FAILED) { - if (error) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed: %s"), - disk->dst, error); - VIR_FREE(error); - } else { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed"), disk->dst= ); - } + qemuMigrationNBDReportMirrorError(disk, error); return -1; } VIR_FREE(error); @@ -553,14 +560,7 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: if (check) { - if (error) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed: %s"), - disk->dst, error); - } else { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed"), disk-= >dst); - } + qemuMigrationNBDReportMirrorError(disk, error); failed =3D true; } ATTRIBUTE_FALLTHROUGH; @@ -635,14 +635,7 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr driv= er, case VIR_DOMAIN_BLOCK_JOB_FAILED: case VIR_DOMAIN_BLOCK_JOB_CANCELED: if (failNoJob) { - if (error) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed: %s"), - disk->dst, error); - } else { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed"), disk->dst= ); - } + qemuMigrationNBDReportMirrorError(disk, error); goto cleanup; } ATTRIBUTE_FALLTHROUGH; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634609698485.8372677539013; Wed, 12 Dec 2018 09:10:09 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 11A568046F; Wed, 12 Dec 2018 17:10:08 +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 C30E6105706D; Wed, 12 Dec 2018 17:10: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 6D7A71888BBE; Wed, 12 Dec 2018 17:10:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9iBj031993 for ; Wed, 12 Dec 2018 12:09:44 -0500 Received: by smtp.corp.redhat.com (Postfix) id 72EE26013A; Wed, 12 Dec 2018 17:09:44 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id C5B8F6012E; Wed, 12 Dec 2018 17:09:43 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:42 +0100 Message-Id: <249a6cf267dc5380c37f4ca558bc21e36da849af.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 26/51] qemu: blockjob: Remove error propagation from qemuBlockJobUpdateDisk 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 12 Dec 2018 17:10:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The job error can be safely accessed in the job structure, so we don't need to propagate it through qemuBlockJobUpdateDisk. Drop the propagation and refactor any caller that pased non-NULL error. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 12 ++---------- src/qemu/qemu_blockjob.h | 3 +-- src/qemu/qemu_driver.c | 6 +++--- src/qemu/qemu_migration.c | 28 +++++++++++----------------- 4 files changed, 17 insertions(+), 32 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index e778e5b7ce..7aaa439791 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -342,23 +342,15 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr drive= r, int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, - virDomainDiskDefPtr disk, - char **error) + virDomainDiskDefPtr disk) { qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; qemuDomainObjPrivatePtr priv =3D vm->privateData; int state =3D job->newstate; - if (error) - *error =3D NULL; - if (state !=3D -1) { qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob); job->newstate =3D -1; - if (error) - VIR_STEAL_PTR(*error, job->errmsg); - else - VIR_FREE(job->errmsg); } return state; @@ -408,6 +400,6 @@ qemuBlockJobSyncEndDisk(virDomainObjPtr vm, virDomainDiskDefPtr disk) { VIR_DEBUG("disk=3D%s", disk->dst); - qemuBlockJobUpdateDisk(vm, asyncJob, disk, NULL); + qemuBlockJobUpdateDisk(vm, asyncJob, disk); QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->synchronous =3D false; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 67b9c94b64..4527ee2a93 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -97,8 +97,7 @@ qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job); int qemuBlockJobUpdateDisk(virDomainObjPtr vm, int asyncJob, - virDomainDiskDefPtr disk, - char **error); + virDomainDiskDefPtr disk); void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job); void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f203f89521..2e47ec021a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4739,7 +4739,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, job->newstate =3D status; - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); endjob: qemuBlockJobStartupFinalize(job); @@ -17397,13 +17397,13 @@ qemuDomainBlockJobAbort(virDomainPtr dom, * do the waiting while still holding the VM job, to prevent newly * scheduled block jobs from confusing us. */ if (!async) { - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); while (qemuBlockJobIsRunning(job)) { if (virDomainObjWait(vm) < 0) { ret =3D -1; goto endjob; } - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk, NULL); + qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); } } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 1ce7863460..ac3c609067 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -464,13 +464,14 @@ qemuMigrationDstStopNBDServer(virQEMUDriverPtr driver, static void -qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk, - const char *errmsg) +qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk) { - if (errmsg) { + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + if (job->errmsg) { virReportError(VIR_ERR_OPERATION_FAILED, _("migration of disk %s failed: %s"), - disk->dst, errmsg); + disk->dst, job->errmsg); } else { virReportError(VIR_ERR_OPERATION_FAILED, _("migration of disk %s failed"), disk->dst); @@ -500,17 +501,15 @@ qemuMigrationSrcNBDStorageCopyReady(virDomainObjPtr v= m, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - char *error =3D NULL; if (!diskPriv->migrating) continue; - status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); + status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk); if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_FAILED) { - qemuMigrationNBDReportMirrorError(disk, error); + qemuMigrationNBDReportMirrorError(disk); return -1; } - VIR_FREE(error); if (disk->mirrorState !=3D VIR_DOMAIN_DISK_MIRROR_STATE_READY) notReady++; @@ -551,16 +550,15 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); - char *error =3D NULL; if (!diskPriv->migrating) continue; - status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); + status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: if (check) { - qemuMigrationNBDReportMirrorError(disk, error); + qemuMigrationNBDReportMirrorError(disk); failed =3D true; } ATTRIBUTE_FALLTHROUGH; @@ -576,8 +574,6 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_COMPLETED) completed++; - - VIR_FREE(error); } /* Updating completed block job drops the lock thus we have to recheck @@ -625,17 +621,16 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr dri= ver, { qemuDomainObjPrivatePtr priv =3D vm->privateData; char *diskAlias =3D NULL; - char *error =3D NULL; int ret =3D -1; int status; int rv; - status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk, &error); + status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: case VIR_DOMAIN_BLOCK_JOB_CANCELED: if (failNoJob) { - qemuMigrationNBDReportMirrorError(disk, error); + qemuMigrationNBDReportMirrorError(disk); goto cleanup; } ATTRIBUTE_FALLTHROUGH; @@ -659,7 +654,6 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr drive= r, cleanup: VIR_FREE(diskAlias); - VIR_FREE(error); return ret; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634603031669.4881787841712; Wed, 12 Dec 2018 09:10:03 -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 D8E74305B886; Wed, 12 Dec 2018 17:10:00 +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 866385D70A; Wed, 12 Dec 2018 17:09:59 +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 3A5133F5DA; Wed, 12 Dec 2018 17:09:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9jU5032006 for ; Wed, 12 Dec 2018 12:09:45 -0500 Received: by smtp.corp.redhat.com (Postfix) id 6C4FA6013B; Wed, 12 Dec 2018 17:09:45 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id BFF4760139; Wed, 12 Dec 2018 17:09:44 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:43 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 27/51] qemu: blockjob: Consume new block job state in the processing function 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.41]); Wed, 12 Dec 2018 17:10:02 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The processing function modifies the job state so it should make sure that the variable holding the new state is cleared properly and not the caller. The caller should only deal with the job state and not the transition that happened. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 7aaa439791..49e747ebbb 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -285,6 +285,9 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, job->state, job->newstate); + if (job->newstate =3D=3D -1) + return; + qemuBlockJobEmitEvents(driver, vm, disk, job->type, job->newstate); /* If we completed a block pull or commit, then update the XML @@ -314,6 +317,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, } job->state =3D job->newstate; + job->newstate =3D -1; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->cap= s) < 0) VIR_WARN("Unable to save status on vm %s after block job", vm->def= ->name); @@ -346,14 +350,13 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, { qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; qemuDomainObjPrivatePtr priv =3D vm->privateData; - int state =3D job->newstate; - if (state !=3D -1) { - qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob); - job->newstate =3D -1; - } + if (job->newstate =3D=3D -1) + return -1; + + qemuBlockJobEventProcessLegacy(priv->driver, vm, job, asyncJob); - return state; + return job->state; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 154463462156471.41765232099192; Wed, 12 Dec 2018 09:10:21 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2E2466111; Wed, 12 Dec 2018 17:10:20 +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 CB51861475; Wed, 12 Dec 2018 17:10:19 +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 6CD4718E3014; Wed, 12 Dec 2018 17:10:19 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9nMf032060 for ; Wed, 12 Dec 2018 12:09:49 -0500 Received: by smtp.corp.redhat.com (Postfix) id 2FB226013A; Wed, 12 Dec 2018 17:09:49 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8110860139; Wed, 12 Dec 2018 17:09:45 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:44 +0100 Message-Id: <57105b8488ead15ce59795aeac7fdbfd6691a584.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 28/51] qemu: blockjob: Pass job into qemuBlockJobUpdateDisk and rename it 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 12 Dec 2018 17:10:20 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Instead of passing in the disk information, pass in the job and name the function accordingly. Few callers needed to be modified to have the job pointer handy. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 20 ++++++++++++-------- src/qemu/qemu_blockjob.h | 6 +++--- src/qemu/qemu_driver.c | 6 +++--- src/qemu/qemu_migration.c | 40 +++++++++++++++++++++++++++------------ 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 49e747ebbb..c1826baa3c 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -333,7 +333,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, /** - * qemuBlockJobUpdateDisk: + * qemuBlockJobUpdate: * @vm: domain * @disk: domain disk * @error: error (output parameter) @@ -344,11 +344,10 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr drive= r, * Returns the block job event processed or -1 if there was no pending eve= nt. */ int -qemuBlockJobUpdateDisk(virDomainObjPtr vm, - int asyncJob, - virDomainDiskDefPtr disk) +qemuBlockJobUpdate(virDomainObjPtr vm, + qemuBlockJobDataPtr job, + int asyncJob) { - qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; qemuDomainObjPrivatePtr priv =3D vm->privateData; if (job->newstate =3D=3D -1) @@ -370,7 +369,7 @@ qemuBlockJobUpdateDisk(virDomainObjPtr vm, * * During a synchronous block job, a block job event for @disk * will not be processed asynchronously. Instead, it will be - * processed only when qemuBlockJobUpdateDisk or qemuBlockJobSyncEndDisk + * processed only when qemuBlockJobUpdate or qemuBlockJobSyncEndDisk * is called. */ void @@ -402,7 +401,12 @@ qemuBlockJobSyncEndDisk(virDomainObjPtr vm, int asyncJob, virDomainDiskDefPtr disk) { + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + if (!job) + return; + VIR_DEBUG("disk=3D%s", disk->dst); - qemuBlockJobUpdateDisk(vm, asyncJob, disk); - QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob->synchronous =3D false; + qemuBlockJobUpdate(vm, job, asyncJob); + job->synchronous =3D false; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 4527ee2a93..9dad47f732 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -95,9 +95,9 @@ qemuBlockJobIsRunning(qemuBlockJobDataPtr job) void qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job); -int qemuBlockJobUpdateDisk(virDomainObjPtr vm, - int asyncJob, - virDomainDiskDefPtr disk); +int qemuBlockJobUpdate(virDomainObjPtr vm, + qemuBlockJobDataPtr job, + int asyncJob); void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job); void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2e47ec021a..4ffa5b573d 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4739,7 +4739,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, job->newstate =3D status; - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); + qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE); endjob: qemuBlockJobStartupFinalize(job); @@ -17397,13 +17397,13 @@ qemuDomainBlockJobAbort(virDomainPtr dom, * do the waiting while still holding the VM job, to prevent newly * scheduled block jobs from confusing us. */ if (!async) { - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); + qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE); while (qemuBlockJobIsRunning(job)) { if (virDomainObjWait(vm) < 0) { ret =3D -1; goto endjob; } - qemuBlockJobUpdateDisk(vm, QEMU_ASYNC_JOB_NONE, disk); + qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE); } } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index ac3c609067..92fcfa6278 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -464,17 +464,16 @@ qemuMigrationDstStopNBDServer(virQEMUDriverPtr driver, static void -qemuMigrationNBDReportMirrorError(virDomainDiskDefPtr disk) +qemuMigrationNBDReportMirrorError(qemuBlockJobDataPtr job, + const char *diskdst) { - qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; - if (job->errmsg) { virReportError(VIR_ERR_OPERATION_FAILED, _("migration of disk %s failed: %s"), - disk->dst, job->errmsg); + diskdst, job->errmsg); } else { virReportError(VIR_ERR_OPERATION_FAILED, - _("migration of disk %s failed"), disk->dst); + _("migration of disk %s failed"), diskdst); } } @@ -501,16 +500,26 @@ qemuMigrationSrcNBDStorageCopyReady(virDomainObjPtr v= m, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); + qemuBlockJobDataPtr job; if (!diskPriv->migrating) continue; - status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk); + if (!(job =3D qemuBlockJobDiskGetJob(disk))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("missing block job data for disk '%s'"), disk= ->dst); + return -1; + } + + status =3D qemuBlockJobUpdate(vm, job, asyncJob); if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_FAILED) { - qemuMigrationNBDReportMirrorError(disk); + qemuMigrationNBDReportMirrorError(job, disk->dst); + virObjectUnref(job); return -1; } + virObjectUnref(job); + if (disk->mirrorState !=3D VIR_DOMAIN_DISK_MIRROR_STATE_READY) notReady++; } @@ -550,15 +559,19 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, for (i =3D 0; i < vm->def->ndisks; i++) { virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); + qemuBlockJobDataPtr job; if (!diskPriv->migrating) continue; - status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk); + if (!(job =3D qemuBlockJobDiskGetJob(disk))) + continue; + + status =3D qemuBlockJobUpdate(vm, job, asyncJob); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: if (check) { - qemuMigrationNBDReportMirrorError(disk); + qemuMigrationNBDReportMirrorError(job, disk->dst); failed =3D true; } ATTRIBUTE_FALLTHROUGH; @@ -574,6 +587,8 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, if (status =3D=3D VIR_DOMAIN_BLOCK_JOB_COMPLETED) completed++; + + virObjectUnref(job); } /* Updating completed block job drops the lock thus we have to recheck @@ -616,6 +631,7 @@ static int qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, + qemuBlockJobDataPtr job, bool failNoJob, qemuDomainAsyncJob asyncJob) { @@ -625,12 +641,12 @@ qemuMigrationSrcNBDCopyCancelOne(virQEMUDriverPtr dri= ver, int status; int rv; - status =3D qemuBlockJobUpdateDisk(vm, asyncJob, disk); + status =3D qemuBlockJobUpdate(vm, job, asyncJob); switch (status) { case VIR_DOMAIN_BLOCK_JOB_FAILED: case VIR_DOMAIN_BLOCK_JOB_CANCELED: if (failNoJob) { - qemuMigrationNBDReportMirrorError(disk); + qemuMigrationNBDReportMirrorError(job, disk->dst); goto cleanup; } ATTRIBUTE_FALLTHROUGH; @@ -698,7 +714,7 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, if (!diskPriv->migrating) continue; - rv =3D qemuMigrationSrcNBDCopyCancelOne(driver, vm, disk, + rv =3D qemuMigrationSrcNBDCopyCancelOne(driver, vm, disk, job, check, asyncJob); if (rv !=3D 0) { if (rv < 0) { --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634626497604.7262322428771; Wed, 12 Dec 2018 09:10:26 -0800 (PST) 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 F0795307CDE4; Wed, 12 Dec 2018 17:10:24 +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 B2AFD6012B; Wed, 12 Dec 2018 17:10:24 +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 55BEF3D3AA; Wed, 12 Dec 2018 17:10:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9ovx032076 for ; Wed, 12 Dec 2018 12:09:50 -0500 Received: by smtp.corp.redhat.com (Postfix) id A2A296013E; Wed, 12 Dec 2018 17:09:50 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7BE5C6012E; Wed, 12 Dec 2018 17:09:49 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:45 +0100 Message-Id: <7e1a96fd5e5577064f047c2c610b7bb3f9c99bc5.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 29/51] qemu: Allocate diskPriv->blockjob only when there's a blockjob 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 12 Dec 2018 17:10:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Rather than storing the presence of the blockjob in a flag we can bind together the lifecycle of the job with the lifecycle of the object which is tracking the data for it. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 76 +++++++++++++++++++++++++++++----------- src/qemu/qemu_blockjob.h | 1 - src/qemu/qemu_domain.c | 5 --- 3 files changed, 55 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index c1826baa3c..87dc520f2c 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -66,23 +66,22 @@ qemuBlockJobDataOnceInit(void) VIR_ONCE_GLOBAL_INIT(qemuBlockJobData) -qemuBlockJobDataPtr -qemuBlockJobDataNew(void) +static qemuBlockJobDataPtr +qemuBlockJobDataNew(qemuBlockjobType type) { + qemuBlockJobDataPtr job =3D NULL; + if (qemuBlockJobDataInitialize() < 0) return NULL; - return virObjectNew(qemuBlockJobDataClass); -} - + if (!(job =3D virObjectNew(qemuBlockJobDataClass))) + return NULL; -static void -qemuBlockJobDataReset(qemuBlockJobDataPtr job) -{ - job->type =3D -1; + job->state =3D QEMU_BLOCKJOB_STATE_NEW; job->newstate =3D -1; - VIR_FREE(job->errmsg); - job->synchronous =3D false; + job->type =3D type; + + return job; } @@ -98,15 +97,16 @@ qemuBlockJobDataPtr qemuBlockJobDiskNew(virDomainDiskDefPtr disk, qemuBlockjobType type) { - qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; - job->disk =3D disk; + qemuBlockJobDataPtr job =3D NULL; - qemuBlockJobDataReset(job); + if (!(job =3D qemuBlockJobDataNew(type))) + return NULL; - job->state =3D QEMU_BLOCKJOB_STATE_NEW; - job->type =3D type; + job->disk =3D disk; + if (disk) + QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D virObjectRef(job); - return virObjectRef(job); + return job; } @@ -141,6 +141,22 @@ qemuBlockJobStarted(qemuBlockJobDataPtr job) } +static void +qemuBlockJobTerminate(qemuBlockJobDataPtr job) +{ + qemuDomainDiskPrivatePtr diskPriv; + + if (job->disk) { + diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(job->disk); + + if (job =3D=3D diskPriv->blockjob) { + virObjectUnref(diskPriv->blockjob); + diskPriv->blockjob =3D NULL; + } + } +} + + /** * qemuBlockJobStartupFinalize: * @job: job being started @@ -156,7 +172,7 @@ qemuBlockJobStartupFinalize(qemuBlockJobDataPtr job) return; if (job->state =3D=3D QEMU_BLOCKJOB_STATE_NEW) - qemuBlockJobDataReset(job); + qemuBlockJobTerminate(job); virObjectUnref(job); } @@ -200,11 +216,15 @@ qemuBlockJobEmitEvents(virQEMUDriverPtr driver, static void qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainDiskDefPtr disk, + qemuBlockJobDataPtr job, int asyncJob) { + virDomainDiskDefPtr disk =3D job->disk; virDomainDiskDefPtr persistDisk =3D NULL; + if (!disk) + return; + if (disk->mirrorState =3D=3D VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT) { if (vm->newDef) { virStorageSourcePtr copy =3D NULL; @@ -256,6 +276,7 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPt= r driver, virStorageSourceBackingStoreClear(disk->src); ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); + qemuBlockJobTerminate(job); } @@ -294,7 +315,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, * to match. */ switch ((virConnectDomainEventBlockJobStatus) job->newstate) { case VIR_DOMAIN_BLOCK_JOB_COMPLETED: - qemuBlockJobEventProcessLegacyCompleted(driver, vm, disk, asyncJob= ); + qemuBlockJobEventProcessLegacyCompleted(driver, vm, job, asyncJob); break; case VIR_DOMAIN_BLOCK_JOB_READY: @@ -310,6 +331,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, } disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; + qemuBlockJobTerminate(job); break; case VIR_DOMAIN_BLOCK_JOB_LAST: @@ -333,7 +355,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, /** - * qemuBlockJobUpdate: + * qemuBlockJobUpdateDisk: * @vm: domain * @disk: domain disk * @error: error (output parameter) @@ -410,3 +432,15 @@ qemuBlockJobSyncEndDisk(virDomainObjPtr vm, qemuBlockJobUpdate(vm, job, asyncJob); job->synchronous =3D false; } + + +qemuBlockJobDataPtr +qemuBlockJobGetByDisk(virDomainDiskDefPtr disk) +{ + qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + + if (!job) + return NULL; + + return virObjectRef(job); +} diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 9dad47f732..8c567ec886 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -73,7 +73,6 @@ struct _qemuBlockJobData { int newstate; /* virConnectDomainEventBlockJobStatus - new state to be= processed */ }; -qemuBlockJobDataPtr qemuBlockJobDataNew(void); qemuBlockJobDataPtr qemuBlockJobDiskNew(virDomainDiskDefPtr disk, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 01b4c97a91..9961ba67d8 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1062,11 +1062,6 @@ qemuDomainDiskPrivateNew(void) if (!(priv =3D virObjectNew(qemuDomainDiskPrivateClass))) return NULL; - if (!(priv->blockjob =3D qemuBlockJobDataNew())) { - virObjectUnref(priv); - priv =3D NULL; - } - return (virObjectPtr) priv; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 154463461477416.915624048975815; Wed, 12 Dec 2018 09:10:14 -0800 (PST) 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 3FFE0307CDF9; Wed, 12 Dec 2018 17:10:13 +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 C2EAD60139; Wed, 12 Dec 2018 17:10:12 +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 602A83D3A2; Wed, 12 Dec 2018 17:10:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9pdn032086 for ; Wed, 12 Dec 2018 12:09:51 -0500 Received: by smtp.corp.redhat.com (Postfix) id D37B460139; Wed, 12 Dec 2018 17:09:51 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id EDDCF6013D; Wed, 12 Dec 2018 17:09:50 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:46 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 30/51] qemu: migration: Don't call qemuBlockJobSyncEndDisk when block job has terminated 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Wed, 12 Dec 2018 17:10:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Now that the data is per-job, we don't really need to bother with finishing the synchronous job handling if the job is already terminated. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_migration.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 92fcfa6278..bed8eed563 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -577,7 +577,6 @@ qemuMigrationSrcNBDCopyCancelled(virDomainObjPtr vm, ATTRIBUTE_FALLTHROUGH; case VIR_DOMAIN_BLOCK_JOB_CANCELED: case VIR_DOMAIN_BLOCK_JOB_COMPLETED: - qemuBlockJobSyncEndDisk(vm, asyncJob, disk); diskPriv->migrating =3D false; break; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634607428213.80142489530397; Wed, 12 Dec 2018 09:10:07 -0800 (PST) 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 16A8074F06; Wed, 12 Dec 2018 17:10:05 +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 B01E06013D; Wed, 12 Dec 2018 17:10:04 +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 5F5DF18A0C2A; Wed, 12 Dec 2018 17:10:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9qdJ032097 for ; Wed, 12 Dec 2018 12:09:52 -0500 Received: by smtp.corp.redhat.com (Postfix) id D6A926013A; Wed, 12 Dec 2018 17:09:52 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2D4CF60139; Wed, 12 Dec 2018 17:09:52 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:47 +0100 Message-Id: <377a534861be75ef105e43a5df6eedb001e60ab4.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 31/51] qemu: blockjob: Convert qemuBlockJobSyncEndDisk to take job instead of disk 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 12 Dec 2018 17:10:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" And rename it in accordance with the change. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 20 ++++++++++---------- src/qemu/qemu_blockjob.h | 6 +++--- src/qemu/qemu_driver.c | 4 ++-- src/qemu/qemu_migration.c | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 87dc520f2c..c98d393f4b 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -386,12 +386,12 @@ qemuBlockJobUpdate(virDomainObjPtr vm, * @disk: domain disk * * Begin a new synchronous block job for @disk. The synchronous - * block job is ended by a call to qemuBlockJobSyncEndDisk, or by + * block job is ended by a call to qemuBlockJobSyncEnd, or by * the guest quitting. * * During a synchronous block job, a block job event for @disk * will not be processed asynchronously. Instead, it will be - * processed only when qemuBlockJobUpdate or qemuBlockJobSyncEndDisk + * processed only when qemuBlockJobUpdate or qemuBlockJobSyncEnd * is called. */ void @@ -409,7 +409,7 @@ qemuBlockJobSyncBegin(qemuBlockJobDataPtr job) /** - * qemuBlockJobSyncEndDisk: + * qemuBlockJobSyncEnd: * @vm: domain * @disk: domain disk * @@ -419,16 +419,16 @@ qemuBlockJobSyncBegin(qemuBlockJobDataPtr job) * qemuBlockJobStartupFinalize will be called. */ void -qemuBlockJobSyncEndDisk(virDomainObjPtr vm, - int asyncJob, - virDomainDiskDefPtr disk) +qemuBlockJobSyncEnd(virDomainObjPtr vm, + qemuBlockJobDataPtr job, + int asyncJob) { - qemuBlockJobDataPtr job =3D QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob; + const char *diskdst =3D NULL; - if (!job) - return; + if (job->disk) + diskdst =3D job->disk->dst; - VIR_DEBUG("disk=3D%s", disk->dst); + VIR_DEBUG("disk=3D%s", NULLSTR(diskdst)); qemuBlockJobUpdate(vm, job, asyncJob); job->synchronous =3D false; } diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 8c567ec886..0ec9fd17b7 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -99,9 +99,9 @@ int qemuBlockJobUpdate(virDomainObjPtr vm, int asyncJob); void qemuBlockJobSyncBegin(qemuBlockJobDataPtr job); -void qemuBlockJobSyncEndDisk(virDomainObjPtr vm, - int asyncJob, - virDomainDiskDefPtr disk); +void qemuBlockJobSyncEnd(virDomainObjPtr vm, + qemuBlockJobDataPtr job, + int asyncJob); qemuBlockJobDataPtr qemuBlockJobGetByDisk(virDomainDiskDefPtr disk) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4ffa5b573d..ff113ae57b 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17408,8 +17408,8 @@ qemuDomainBlockJobAbort(virDomainPtr dom, } endjob: - if (disk) - qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_NONE, disk); + if (job && !async) + qemuBlockJobSyncEnd(vm, job, QEMU_ASYNC_JOB_NONE); qemuDomainObjEndJob(driver, vm); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index bed8eed563..4a6f631689 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -721,7 +721,7 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, err =3D virSaveLastError(); failed =3D true; } - qemuBlockJobSyncEndDisk(vm, asyncJob, disk); + qemuBlockJobSyncEnd(vm, job, asyncJob); diskPriv->migrating =3D false; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634619594547.4148250203389; Wed, 12 Dec 2018 09:10:19 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 06C76637FF; Wed, 12 Dec 2018 17:10:18 +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 A346F1059595; Wed, 12 Dec 2018 17:10:17 +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 4564D18E3010; Wed, 12 Dec 2018 17:10:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9rWa032122 for ; Wed, 12 Dec 2018 12:09:53 -0500 Received: by smtp.corp.redhat.com (Postfix) id D5FF46013A; Wed, 12 Dec 2018 17:09:53 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 31AD26012B; Wed, 12 Dec 2018 17:09:53 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:48 +0100 Message-Id: <8d7ea2dbbd577eb0df4e9636ec40ae77b6e61ab5.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 32/51] qemu: blockjob: Add job name into the data 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 12 Dec 2018 17:10:19 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Currently the job name corresponds to the disk the job belongs to. For jobs which will not correspond to disks we'll need to track the name separately. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 20 ++++++++++++++++---- src/qemu/qemu_blockjob.h | 7 +++++-- src/qemu/qemu_driver.c | 8 ++++---- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_process.c | 2 +- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index c98d393f4b..27e854e2b2 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -36,6 +36,7 @@ #include "virtime.h" #include "locking/domain_lock.h" #include "viralloc.h" +#include "virstring.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -50,6 +51,7 @@ qemuBlockJobDataDispose(void *obj) { qemuBlockJobDataPtr job =3D obj; + VIR_FREE(job->name); VIR_FREE(job->errmsg); } @@ -67,9 +69,11 @@ qemuBlockJobDataOnceInit(void) VIR_ONCE_GLOBAL_INIT(qemuBlockJobData) static qemuBlockJobDataPtr -qemuBlockJobDataNew(qemuBlockjobType type) +qemuBlockJobDataNew(qemuBlockjobType type, + const char *name) { qemuBlockJobDataPtr job =3D NULL; + qemuBlockJobDataPtr ret =3D NULL; if (qemuBlockJobDataInitialize() < 0) return NULL; @@ -77,11 +81,18 @@ qemuBlockJobDataNew(qemuBlockjobType type) if (!(job =3D virObjectNew(qemuBlockJobDataClass))) return NULL; + if (VIR_STRDUP(job->name, name) < 0) + goto cleanup; + job->state =3D QEMU_BLOCKJOB_STATE_NEW; job->newstate =3D -1; job->type =3D type; - return job; + VIR_STEAL_PTR(ret, job); + + cleanup: + virObjectUnref(job); + return ret; } @@ -95,11 +106,12 @@ qemuBlockJobDataNew(qemuBlockjobType type) */ qemuBlockJobDataPtr qemuBlockJobDiskNew(virDomainDiskDefPtr disk, - qemuBlockjobType type) + qemuBlockjobType type, + const char *jobname) { qemuBlockJobDataPtr job =3D NULL; - if (!(job =3D qemuBlockJobDataNew(type))) + if (!(job =3D qemuBlockJobDataNew(type, jobname))) return NULL; job->disk =3D disk; diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 0ec9fd17b7..f67b0f39be 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -63,6 +63,8 @@ typedef qemuBlockJobData *qemuBlockJobDataPtr; struct _qemuBlockJobData { virObject parent; + char *name; + virDomainDiskDefPtr disk; /* may be NULL, if blockjob does not corrspo= nd to any disk */ int type; /* qemuBlockjobType */ @@ -76,8 +78,9 @@ struct _qemuBlockJobData { qemuBlockJobDataPtr qemuBlockJobDiskNew(virDomainDiskDefPtr disk, - qemuBlockjobType type) - ATTRIBUTE_NONNULL(1); + qemuBlockjobType type, + const char *jobname) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); qemuBlockJobDataPtr qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ff113ae57b..5675d2dc87 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4732,7 +4732,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, } if (!(job =3D qemuBlockJobDiskGetJob(disk))) { - if (!(job =3D qemuBlockJobDiskNew(disk, type))) + if (!(job =3D qemuBlockJobDiskNew(disk, type, diskAlias))) goto endjob; qemuBlockJobStarted(job); } @@ -17268,7 +17268,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, speed <<=3D 20; } - if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL))) + if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_PULL, devic= e))) goto endjob; qemuDomainObjEnterMonitor(driver, vm); @@ -17803,7 +17803,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, goto endjob; } - if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) + if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, devic= e))) goto endjob; /* Actually start the mirroring */ @@ -18217,7 +18217,7 @@ qemuDomainBlockCommit(virDomainPtr dom, jobtype =3D QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT; } - if (!(job =3D qemuBlockJobDiskNew(disk, jobtype))) + if (!(job =3D qemuBlockJobDiskNew(disk, jobtype, device))) goto endjob; qemuDomainObjEnterMonitor(driver, vm); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4a6f631689..4ce3141465 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -914,7 +914,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driv= er, if (!(diskAlias =3D qemuAliasDiskDriveFromDisk(disk))) goto cleanup; - if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY))) + if (!(job =3D qemuBlockJobDiskNew(disk, QEMU_BLOCKJOB_TYPE_COPY, diskA= lias))) goto cleanup; qemuBlockJobSyncBegin(job); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1171da62a8..3f1dd662e9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7776,7 +7776,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))) + if (!(job =3D qemuBlockJobDiskNew(disk, jobtype, jobname))) return -1; qemuBlockJobStarted(job); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 15446346132021001.5795809189764; Wed, 12 Dec 2018 09:10:13 -0800 (PST) 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 2D9943082E63; Wed, 12 Dec 2018 17:10:11 +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 BAE98600CC; Wed, 12 Dec 2018 17:10:10 +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 601DE3D3A0; Wed, 12 Dec 2018 17:10:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9s6p032137 for ; Wed, 12 Dec 2018 12:09:54 -0500 Received: by smtp.corp.redhat.com (Postfix) id D8F4B6013B; Wed, 12 Dec 2018 17:09:54 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 31AB66012E; Wed, 12 Dec 2018 17:09:54 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:49 +0100 Message-Id: <219a2e350ca1acd84fc4588254d1f2c3bd48f8ef.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 33/51] qemu: domain: Add global table of blockjobs 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 12 Dec 2018 17:10:12 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Block jobs currently belong to disks only so we can look up the block job data for them in the corresponding disks. This won't be the case when using blockdev as certain jobs don't even correspond to a disk and most of them can run on a part of the backing chain. Add a global table of blockjobs which can be used to look up the data for the blockjobs when the job events need to be processed. The table is a hash table organized by job name and has a reference to the job. New and running jobs will later be added to this table. Reference counting will allow to reap job state for synchronous callers. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_domain.c | 7 +++++++ src/qemu/qemu_domain.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 9961ba67d8..7a9a94efcf 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1906,6 +1906,9 @@ qemuDomainObjPrivateAlloc(void *opaque) if (!(priv->devs =3D virChrdevAlloc())) goto error; + if (!(priv->blockjobs =3D virHashCreate(5, virObjectFreeHashData))) + goto error; + priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; priv->driver =3D opaque; @@ -1973,6 +1976,8 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr= priv) qemuDomainObjResetJob(priv); qemuDomainObjResetAsyncJob(priv); + + virHashRemoveAll(priv->blockjobs); } @@ -2004,6 +2009,8 @@ qemuDomainObjPrivateFree(void *data) qemuDomainSecretInfoFree(&priv->migSecinfo); qemuDomainMasterKeyFree(priv); + virHashFree(priv->blockjobs); + VIR_FREE(priv); } diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index a03950e77b..a243bdc80e 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -373,6 +373,9 @@ struct _qemuDomainObjPrivate { /* true if libvirt remembers the original owner for files */ bool rememberOwner; + + /* running block jobs */ + virHashTablePtr blockjobs; }; # define QEMU_DOMAIN_PRIVATE(vm) \ --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634617758814.2045706207051; Wed, 12 Dec 2018 09:10:17 -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 F0D3930A314F; Wed, 12 Dec 2018 17:10:15 +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 BAF265D760; Wed, 12 Dec 2018 17:10:15 +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 6580618A27BC; Wed, 12 Dec 2018 17:10:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9tiL032147 for ; Wed, 12 Dec 2018 12:09:55 -0500 Received: by smtp.corp.redhat.com (Postfix) id D46216012E; Wed, 12 Dec 2018 17:09:55 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 31A216012B; Wed, 12 Dec 2018 17:09:55 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:50 +0100 Message-Id: <783220c0af6e46031cebd13831ad1b1bd974e232.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 34/51] 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 12 Dec 2018 17:10:17 +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 | 31 ++++++++++++++++++++++++------- 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, 41 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 27e854e2b2..97b9d7e5a6 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -105,20 +105,32 @@ qemuBlockJobDataNew(qemuBlockjobType type, * Returns 0 on success and -1 on failure. */ qemuBlockJobDataPtr -qemuBlockJobDiskNew(virDomainDiskDefPtr disk, +qemuBlockJobDiskNew(virDomainObjPtr vm, + virDomainDiskDefPtr disk, qemuBlockjobType type, const char *jobname) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuBlockJobDataPtr job =3D NULL; + qemuBlockJobDataPtr ret =3D NULL; if (!(job =3D qemuBlockJobDataNew(type, jobname))) return NULL; + if (virHashAddEntry(priv->blockjobs, jobname, virObjectRef(job)) < 0) { + virObjectUnref(job); + goto cleanup; + } + job->disk =3D disk; if (disk) QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D virObjectRef(job); - return job; + VIR_STEAL_PTR(ret, job); + + cleanup: + virObjectUnref(job); + return ret; } @@ -154,10 +166,14 @@ qemuBlockJobStarted(qemuBlockJobDataPtr job) static void -qemuBlockJobTerminate(qemuBlockJobDataPtr job) +qemuBlockJobTerminate(virDomainObjPtr vm, + qemuBlockJobDataPtr job) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuDomainDiskPrivatePtr diskPriv; + virHashRemoveEntry(priv->blockjobs, job->name); + if (job->disk) { diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(job->disk); @@ -178,13 +194,14 @@ qemuBlockJobTerminate(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) - qemuBlockJobTerminate(job); + qemuBlockJobTerminate(vm, job); virObjectUnref(job); } @@ -288,7 +305,7 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPt= r driver, virStorageSourceBackingStoreClear(disk->src); ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true)); ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob)); - qemuBlockJobTerminate(job); + qemuBlockJobTerminate(vm, job); } @@ -343,7 +360,7 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver, } disk->mirrorState =3D VIR_DOMAIN_DISK_MIRROR_STATE_NONE; disk->mirrorJob =3D VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN; - qemuBlockJobTerminate(job); + qemuBlockJobTerminate(vm, job); break; case VIR_DOMAIN_BLOCK_JOB_LAST: diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index f67b0f39be..6f58d323d0 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -77,7 +77,8 @@ struct _qemuBlockJobData { qemuBlockJobDataPtr -qemuBlockJobDiskNew(virDomainDiskDefPtr disk, +qemuBlockJobDiskNew(virDomainObjPtr vm, + virDomainDiskDefPtr disk, qemuBlockjobType type, const char *jobname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); @@ -95,7 +96,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 5675d2dc87..1b31132807 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4732,7 +4732,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); } @@ -4742,7 +4742,7 @@ processBlockJobEvent(virQEMUDriverPtr driver, qemuBlockJobUpdate(vm, job, QEMU_ASYNC_JOB_NONE); endjob: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); qemuDomainObjEndJob(driver, vm); } @@ -17268,7 +17268,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); @@ -17294,7 +17294,7 @@ qemuDomainBlockPullCommon(virQEMUDriverPtr driver, qemuDomainObjEndJob(driver, vm); cleanup: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); virObjectUnref(cfg); VIR_FREE(basePath); VIR_FREE(backingPath); @@ -17803,7 +17803,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, 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; /* Actually start the mirroring */ @@ -17842,7 +17842,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, virSetError(monitor_error); virFreeError(monitor_error); } - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); cleanup: VIR_FREE(device); @@ -18217,7 +18217,7 @@ qemuDomainBlockCommit(virDomainPtr dom, jobtype =3D QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT; } - if (!(job =3D qemuBlockJobDiskNew(disk, jobtype, device))) + if (!(job =3D qemuBlockJobDiskNew(vm, disk, jobtype, device))) goto endjob; qemuDomainObjEnterMonitor(driver, vm); @@ -18260,7 +18260,7 @@ qemuDomainBlockCommit(virDomainPtr dom, } } virStorageSourceFree(mirror); - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); qemuDomainObjEndJob(driver, vm); cleanup: diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4ce3141465..87eeec3d84 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -914,7 +914,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); @@ -943,7 +943,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 3f1dd662e9..4b57411856 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -967,7 +967,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_= UNUSED, } cleanup: - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); qemuProcessEventFree(processEvent); virObjectUnlock(vm); return 0; @@ -7776,7 +7776,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); @@ -7789,7 +7789,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload, } } - qemuBlockJobStartupFinalize(job); + qemuBlockJobStartupFinalize(vm, job); return 0; } --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634624290635.9470799102395; Wed, 12 Dec 2018 09:10:24 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8F5723082E62; Wed, 12 Dec 2018 17:10:22 +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 4ED7B607A1; Wed, 12 Dec 2018 17:10:22 +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 F13EC18E3016; Wed, 12 Dec 2018 17:10:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9v0I032158 for ; Wed, 12 Dec 2018 12:09:57 -0500 Received: by smtp.corp.redhat.com (Postfix) id 523FB60149; Wed, 12 Dec 2018 17:09:57 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2E0FB6012B; Wed, 12 Dec 2018 17:09:56 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:51 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 35/51] qemu: blockjob: Add string convertors for blockjob type and state enums 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Wed, 12 Dec 2018 17:10:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Later on we'll format these values into the status XML so the from/to string functions will come handy. The implementation also notes that these will be used in the status XML to avoid somebody changing the values. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 7 +++++++ src/qemu/qemu_blockjob.h | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 97b9d7e5a6..24a0efe36f 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -42,6 +42,13 @@ VIR_LOG_INIT("qemu.qemu_blockjob"); +/* Note that qemuBlockjobState and qemuBlockjobType values are formatted i= nto + * the status XML */ +VIR_ENUM_IMPL(qemuBlockjobState, QEMU_BLOCKJOB_STATE_LAST, + "completed", "failed", "cancelled", "ready", "new", "running= "); + +VIR_ENUM_IMPL(qemuBlockjob, QEMU_BLOCKJOB_TYPE_LAST, + "", "pull", "copy", "commit", "active-commit", ""); static virClassPtr qemuBlockJobDataClass; diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 6f58d323d0..d1e94dc066 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -41,6 +41,8 @@ typedef enum { } qemuBlockjobState; verify((int)QEMU_BLOCKJOB_STATE_NEW =3D=3D VIR_DOMAIN_BLOCK_JOB_LAST); +VIR_ENUM_DECL(qemuBlockjobState) + /** * This enum has to map all known block job types from enum virDomainBlock= JobType * to the same values. All internal blockjobs can be mapped after and don't @@ -57,6 +59,8 @@ typedef enum { } qemuBlockjobType; verify((int)QEMU_BLOCKJOB_TYPE_INTERNAL =3D=3D VIR_DOMAIN_BLOCK_JOB_TYPE_L= AST); +VIR_ENUM_DECL(qemuBlockjob) + typedef struct _qemuBlockJobData qemuBlockJobData; typedef qemuBlockJobData *qemuBlockJobDataPtr; --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634629208618.921480802278; Wed, 12 Dec 2018 09:10:29 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 421DA356F5; Wed, 12 Dec 2018 17:10:27 +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 DDED160C61; Wed, 12 Dec 2018 17:10:26 +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 8CCA83D3AB; Wed, 12 Dec 2018 17:10:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCH9wnY032174 for ; Wed, 12 Dec 2018 12:09:58 -0500 Received: by smtp.corp.redhat.com (Postfix) id 5118460139; Wed, 12 Dec 2018 17:09:58 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9D8C26012B; Wed, 12 Dec 2018 17:09:57 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:52 +0100 Message-Id: <828fba18957905a788e3bd3811a6949c68021afb.1544634194.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 36/51] qemu: domain: Store blockjob data in the status XML 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 12 Dec 2018 17:10:28 +0000 (UTC) Content-Type: text/plain; charset="utf-8" We need to store the block job state in the status XML so that we can properly recover any data when reconnecting after startup and also in the end to be able to do any transition of the backing chain that happened while libvirt was not connected to the monitor. First step is to note the name, type, state and corresponding disk into the status XML. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_domain.c | 105 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 7a9a94efcf..7845889dec 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -35,6 +35,7 @@ #include "qemu_migration_params.h" #include "qemu_security.h" #include "qemu_extdevice.h" +#include "qemu_blockjob.h" #include "viralloc.h" #include "virlog.h" #include "virerror.h" @@ -2235,17 +2236,47 @@ qemuDomainObjPrivateXMLFormatAutomaticPlacement(vir= BufferPtr buf, } +static int +qemuDomainObjPrivateXMLFormatBlockjobIterator(void *payload, + const void *name ATTRIBUTE_U= NUSED, + void *data) +{ + virBuffer attrBuf =3D VIR_BUFFER_INITIALIZER; + virBuffer childBuf =3D VIR_BUFFER_INITIALIZER; + qemuBlockJobDataPtr job =3D payload; + virBufferPtr buf =3D data; + + virBufferSetChildIndent(&childBuf, buf); + + virBufferAsprintf(&attrBuf, " name=3D'%s'", job->name); + virBufferAsprintf(&attrBuf, " type=3D'%s'", qemuBlockjobTypeToString(j= ob->type)); + virBufferAsprintf(&attrBuf, " state=3D'%s'", qemuBlockjobStateTypeToSt= ring(job->state)); + + if (job->disk) + virBufferAsprintf(&childBuf, "\n", job->disk->ds= t); + + return virXMLFormatElement(buf, "blockjob", &attrBuf, &childBuf); +} + + static int qemuDomainObjPrivateXMLFormatBlockjobs(virBufferPtr buf, virDomainObjPtr vm) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; virBuffer attrBuf =3D VIR_BUFFER_INITIALIZER; + virBuffer childBuf =3D VIR_BUFFER_INITIALIZER; bool bj =3D qemuDomainHasBlockjob(vm, false); virBufferAsprintf(&attrBuf, " active=3D'%s'", virTristateBoolTypeToString(virTristateBoolFromBool(= bj))); - return virXMLFormatElement(buf, "blockjobs", &attrBuf, NULL); + virBufferSetChildIndent(&childBuf, buf); + + virHashForEach(priv->blockjobs, + qemuDomainObjPrivateXMLFormatBlockjobIterator, &childBu= f); + + return virXMLFormatElement(buf, "blockjobs", &attrBuf, &childBuf); } @@ -2599,18 +2630,84 @@ qemuDomainObjPrivateXMLParseAutomaticPlacement(xmlX= PathContextPtr ctxt, static int -qemuDomainObjPrivateXMLParseBlockjobs(qemuDomainObjPrivatePtr priv, +qemuDomainObjPrivateXMLParseBlockjobData(virDomainObjPtr vm, + xmlNodePtr node, + xmlXPathContextPtr ctxt) +{ + xmlNodePtr save_node =3D ctxt->node; + virDomainDiskDefPtr disk =3D NULL; + qemuBlockJobDataPtr job =3D NULL; + char *name =3D NULL; + char *typestr =3D NULL; + int type; + char *statestr =3D NULL; + int state; + char *diskdst =3D NULL; + int ret =3D -1; + + ctxt->node =3D node; + + if (!(name =3D virXPathString("string(./@name)", ctxt)) || + !(typestr =3D virXPathString("string(./@type)", ctxt)) || + !(statestr =3D virXPathString("string(./@state)", ctxt)) || + (type =3D qemuBlockjobTypeFromString(typestr)) < 0 || + (state =3D qemuBlockjobStateTypeFromString(statestr)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("malformed block job data")); + goto cleanup; + } + + if ((diskdst =3D virXPathString("string(./disk/@dst)", ctxt))) + disk =3D virDomainDiskByName(vm->def, diskdst, false); + + if (!(job =3D qemuBlockJobDiskNew(vm, disk, type, name))) + goto cleanup; + + job->state =3D state; + + ret =3D 0; + + cleanup: + virObjectUnref(job); + VIR_FREE(name); + VIR_FREE(typestr); + VIR_FREE(statestr); + VIR_FREE(diskdst); + ctxt->node =3D save_node; + return ret; +} + + +static int +qemuDomainObjPrivateXMLParseBlockjobs(virDomainObjPtr vm, + qemuDomainObjPrivatePtr priv, xmlXPathContextPtr ctxt) { + xmlNodePtr *nodes =3D NULL; + ssize_t nnodes =3D 0; char *active; int tmp; + size_t i; + int ret =3D -1; if ((active =3D virXPathString("string(./blockjobs/@active)", ctxt)) && (tmp =3D virTristateBoolTypeFromString(active)) > 0) priv->reconnectBlockjobs =3D tmp; + if ((nnodes =3D virXPathNodeSet("./blockjobs/blockjob", ctxt, &nodes))= < 0) + goto cleanup; + + for (i =3D 0; i < nnodes; i++) { + if (qemuDomainObjPrivateXMLParseBlockjobData(vm, nodes[i], ctxt) <= 0) + goto cleanup; + } + + ret =3D 0; + + cleanup: VIR_FREE(active); - return 0; + VIR_FREE(nodes); + return ret; } @@ -2989,7 +3086,7 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, qemuDomainObjPrivateXMLParsePR(ctxt, &priv->prDaemonRunning); - if (qemuDomainObjPrivateXMLParseBlockjobs(priv, ctxt) < 0) + if (qemuDomainObjPrivateXMLParseBlockjobs(vm, priv, ctxt) < 0) goto error; qemuDomainStorageIdReset(priv); --=20 2.19.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun Apr 28 22:34:55 2024 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 1544634621882837.8507975394847; Wed, 12 Dec 2018 09:10:21 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A39C030C41B0; Wed, 12 Dec 2018 17:10:20 +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 5E90160C6A; Wed, 12 Dec 2018 17:10:20 +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 01B433D3A6; Wed, 12 Dec 2018 17:10:19 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wBCHA05Z032201 for ; Wed, 12 Dec 2018 12:10:00 -0500 Received: by smtp.corp.redhat.com (Postfix) id 3C5E96012B; Wed, 12 Dec 2018 17:10:00 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id CB85D6013E; Wed, 12 Dec 2018 17:09:58 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 12 Dec 2018 18:08:53 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RFC 37/51] tests: qemustatusxml2xml: Add test case for block job tracking 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Wed, 12 Dec 2018 17:10:21 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- .../blockjob-blockdev-in.xml | 364 ++++++++++++++++++ .../blockjob-blockdev-out.xml | 1 + tests/qemuxml2xmltest.c | 2 + 3 files changed, 367 insertions(+) create mode 100644 tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml create mode 120000 tests/qemustatusxml2xmldata/blockjob-blockdev-out.xml diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/q= emustatusxml2xmldata/blockjob-blockdev-in.xml new file mode 100644 index 0000000000..23d2a209f3 --- /dev/null +++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy + 0439a4a8-db56-4933-9183-d8681d7b0746 + 1024000 + 1024000 + 8 + + + + + /machine + + + hvm + + + + + + + + + + + + + + + + + + + + destroy + restart + restart + + + + + + /home/pipo/git/qemu.git/x86_64-softmmu/qemu-system-x86_64<= /emulator> + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + +
+ +