From nobody Mon Feb 9 12:29:42 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1564002478; cv=none; d=zoho.com; s=zohoarc; b=H32iJMMdWfI08rfNgkVc6sigRRhNR+1JnrnGZRVMPU8sIYcQAudamht3WUFj5eUNo6kbGcjobW1Pk+ahowRgDjiZZROITvo8fqySNNWN1gbBbMlk/R2pnpG5/f4IK41Xdn5vdF3eJrv/faMMfbGZCnYuslIF+qyot34QzVRQ1iI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564002478; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=lY2nuSQOkPPC/bwhK++gTkbbMwDdH5/TLsOM1tCrt8Q=; b=curqjIK4BeMgPi9bmC7q/+MRpadOrwd9d3V3Cy1eKrmw8aMBl+yA0CU1gbYVd5eRAR/QuUvAR73Zun9aQOYFCu+SVzPAxcmy96W+C5Gj6ujoGn9cYVMDwA6iuh9k1QwS6J9oBF7YO/TpbB9XHyHI6Gt7ZYm7dOyLdUPtfpfDvWo= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 156400247884866.49705543848108; Wed, 24 Jul 2019 14:07:58 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AA9A8307D90D; Wed, 24 Jul 2019 21:07: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 7E31260624; Wed, 24 Jul 2019 21:07: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 47F2A18045CE; Wed, 24 Jul 2019 21:07:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6OL7hxW003677 for ; Wed, 24 Jul 2019 17:07:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id 27D8F5D967; Wed, 24 Jul 2019 21:07:43 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.229]) by smtp.corp.redhat.com (Postfix) with ESMTP id A71E95DA34 for ; Wed, 24 Jul 2019 21:07:42 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 24 Jul 2019 23:07:31 +0200 Message-Id: <6ae8e6f0125c0438ceb6e937fd62e1789612e091.1564002117.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/9] qemu: blockjob: Register disk->mirror with a job only when required 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.48]); Wed, 24 Jul 2019 21:07:58 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Commit job for example references existing storage in the subelement thus tracking it separately could lead into problems. This patch introduces qemuBlockJobDiskRegisterMirror which registers the mirror chain separately only for job which require it. This also comes with remembering that in the status XML. Signed-off-by: Peter Krempa --- src/qemu/qemu_blockjob.c | 22 ++++++++++++++++++- src/qemu/qemu_blockjob.h | 4 ++++ src/qemu/qemu_domain.c | 14 +++++++++++- .../blockjob-blockdev-in.xml | 2 +- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index ac7b3a0aef..a3109d3934 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -126,6 +126,9 @@ qemuBlockJobDataNew(qemuBlockJobType type, * * This function registers @job with @disk and @vm and records it into the= status * xml (if @savestatus is true). + * + * Note that if @job also references a separate chain e.g. for disk mirror= ing + * qemuBlockJobDiskRegisterMirror should be used. */ int qemuBlockJobRegister(qemuBlockJobDataPtr job, @@ -143,7 +146,6 @@ qemuBlockJobRegister(qemuBlockJobDataPtr job, if (disk) { job->disk =3D disk; job->chain =3D virObjectRef(disk->src); - job->mirrorChain =3D virObjectRef(disk->mirror); QEMU_DOMAIN_DISK_PRIVATE(disk)->blockjob =3D virObjectRef(job); } @@ -205,6 +207,24 @@ qemuBlockJobDiskNew(virDomainObjPtr vm, } +/** + * qemuBlockJobDiskRegisterMirror: + * @job: block job to register 'mirror' chain on + * + * In cases when the disk->mirror attribute references a separate storage = chain + * such as for block-copy, this function registers it with the job. Note + * that this function does not save the status XML and thus must be used b= efore + * qemuBlockJobRegister or qemuBlockJobStarted to properly track the chain + * in the status XML. + */ +void +qemuBlockJobDiskRegisterMirror(qemuBlockJobDataPtr job) +{ + if (job->disk) + job->mirrorChain =3D virObjectRef(job->disk->mirror); +} + + /** * qemuBlockJobDiskGetJob: * @disk: disk definition diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index 47bdc54b2b..3299207610 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -110,6 +110,10 @@ qemuBlockJobDiskNew(virDomainObjPtr vm, const char *jobname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4); +void +qemuBlockJobDiskRegisterMirror(qemuBlockJobDataPtr job) + ATTRIBUTE_NONNULL(1); + qemuBlockJobDataPtr qemuBlockJobDiskGetJob(virDomainDiskDefPtr disk) ATTRIBUTE_NONNULL(1); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e7f28aa2b8..c508f55287 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2367,7 +2367,10 @@ qemuDomainObjPrivateXMLFormatBlockjobIterator(void *= payload, virBufferEscapeString(&childBuf, "%s", job->errmsg); if (job->disk) { - virBufferEscapeString(&childBuf, "\n", job->disk= ->dst); + virBufferEscapeString(&childBuf, "disk->ds= t); + if (job->mirrorChain) + virBufferAddLit(&childBuf, " mirror=3D'yes'"); + virBufferAddLit(&childBuf, "/>\n"); } else { if (job->chain && qemuDomainObjPrivateXMLFormatBlockjobFormatChain(&chainsBuf, @@ -2806,6 +2809,7 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainObj= Ptr vm, int state =3D QEMU_BLOCKJOB_STATE_FAILED; VIR_AUTOFREE(char *) diskdst =3D NULL; VIR_AUTOFREE(char *) newstatestr =3D NULL; + VIR_AUTOFREE(char *) mirror =3D NULL; int newstate =3D -1; bool invalidData =3D false; xmlNodePtr tmp; @@ -2840,6 +2844,10 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainOb= jPtr vm, !(disk =3D virDomainDiskByName(vm->def, diskdst, false))) invalidData =3D true; + if ((mirror =3D virXPathString("string(./disk/@mirror)", ctxt)) && + STRNEQ(mirror, "yes")) + invalidData =3D true; + if (!disk && !invalidData) { if ((tmp =3D virXPathNode("./chains/disk", ctxt)) && !(job->chain =3D qemuDomainObjPrivateXMLParseBlockjobChain(tmp= , ctxt, xmlopt))) @@ -2854,6 +2862,10 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainOb= jPtr vm, job->newstate =3D newstate; job->errmsg =3D virXPathString("string(./errmsg)", ctxt); job->invalidData =3D invalidData; + job->disk =3D disk; + + if (mirror) + qemuBlockJobDiskRegisterMirror(job); if (qemuBlockJobRegister(job, vm, disk, false) < 0) return -1; diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/q= emustatusxml2xmldata/blockjob-blockdev-in.xml index 5b9777ca71..7b9282d059 100644 --- a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml +++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml @@ -235,7 +235,7 @@ - + --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list