From nobody Mon Dec 15 01:40:42 2025 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677250349285122.0751691178217; Fri, 24 Feb 2023 06:52:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVZNX-0007jE-Ic; Fri, 24 Feb 2023 09:48:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVZNU-0007gA-IE; Fri, 24 Feb 2023 09:48:52 -0500 Received: from proxmox-new.maurer-it.com ([94.136.29.106]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVZNS-0002rA-01; Fri, 24 Feb 2023 09:48:52 -0500 Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 65D1E48526; Fri, 24 Feb 2023 15:48:36 +0100 (CET) From: Fiona Ebner To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, armbru@redhat.com, eblake@redhat.com, hreitz@redhat.com, kwolf@redhat.com, vsementsov@yandex-team.ru, jsnow@redhat.com, den@virtuozzo.com, t.lamprecht@proxmox.com, alexander.ivanov@virtuozzo.com Subject: [PATCH 7/9] mirror: return mirror-specific information upon query Date: Fri, 24 Feb 2023 15:48:23 +0100 Message-Id: <20230224144825.466375-8-f.ebner@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230224144825.466375-1-f.ebner@proxmox.com> References: <20230224144825.466375-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=94.136.29.106; envelope-from=f.ebner@proxmox.com; helo=proxmox-new.maurer-it.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZM-MESSAGEID: 1677250350725100001 Content-Type: text/plain; charset="utf-8" To start out, only actively-synced is returned. For example, this is useful for jobs that started out in background mode and switched to active mode. Once actively-synced is true, it's clear that the mode switch has been completed. Note that completion of the switch might happen much earlier, e.g. if the switch happens before the job is ready, once all background operations have finished. It's assumed that whether the disks are actively-synced or not is more interesting than whether the mode switch completed. That information can still be added if required in the future. Signed-off-by: Fiona Ebner --- block/mirror.c | 10 ++++++++++ qapi/block-core.json | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/block/mirror.c b/block/mirror.c index 961aaa5cd6..02b5bd8bd2 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1253,6 +1253,15 @@ static void mirror_change(BlockJob *job, BlockJobCha= ngeOptions *opts, s->in_drain =3D false; } =20 +static void mirror_query(BlockJob *job, BlockJobInfo *info) +{ + MirrorBlockJob *s =3D container_of(job, MirrorBlockJob, common); + + info->u.mirror =3D (BlockJobInfoMirror) { + .actively_synced =3D s->actively_synced, + }; +} + static const BlockJobDriver mirror_job_driver =3D { .job_driver =3D { .instance_size =3D sizeof(MirrorBlockJob), @@ -1268,6 +1277,7 @@ static const BlockJobDriver mirror_job_driver =3D { }, .drained_poll =3D mirror_drained_poll, .change =3D mirror_change, + .query =3D mirror_query, }; =20 static const BlockJobDriver commit_active_job_driver =3D { diff --git a/qapi/block-core.json b/qapi/block-core.json index adb43a4592..07e0f30492 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1300,6 +1300,19 @@ { 'enum': 'MirrorCopyMode', 'data': ['background', 'write-blocking'] } =20 +## +# @BlockJobInfoMirror: +# +# Information specific to mirror block jobs. +# +# @actively-synced: Whether the source is actively synced to the target, i= .e. +# same data and new writes are done synchronously to bot= h. +# +# Since 8.0 +## +{ 'struct': 'BlockJobInfoMirror', + 'data': { 'actively-synced': 'bool' } } + ## # @BlockJobInfo: # @@ -1350,7 +1363,7 @@ 'auto-finalize': 'bool', 'auto-dismiss': 'bool', '*error': 'str' }, 'discriminator': 'type', - 'data': {} } + 'data': { 'mirror': 'BlockJobInfoMirror' } } =20 ## # @query-block-jobs: --=20 2.30.2