From nobody Sun Feb 8 22:07:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1487692135074856.4366002341771; Tue, 21 Feb 2017 07:48:55 -0800 (PST) Received: from localhost ([::1]:46454 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cgCgO-0004Im-Ig for importer@patchew.org; Tue, 21 Feb 2017 10:48:52 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43844) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cgBvS-0001Ne-0w for qemu-devel@nongnu.org; Tue, 21 Feb 2017 10:00:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cgBvN-0008SY-2c for qemu-devel@nongnu.org; Tue, 21 Feb 2017 10:00:22 -0500 Received: from mx1.redhat.com ([209.132.183.28]:35922) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cgBvB-0008H5-ER; Tue, 21 Feb 2017 10:00:05 -0500 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7AD3A6267F; Tue, 21 Feb 2017 15:00:05 +0000 (UTC) Received: from noname.str.redhat.com (dhcp-192-197.str.redhat.com [10.33.192.197]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1LEwudT030565; Tue, 21 Feb 2017 10:00:04 -0500 From: Kevin Wolf To: qemu-block@nongnu.org Date: Tue, 21 Feb 2017 15:58:41 +0100 Message-Id: <1487689130-30373-46-git-send-email-kwolf@redhat.com> In-Reply-To: <1487689130-30373-1-git-send-email-kwolf@redhat.com> References: <1487689130-30373-1-git-send-email-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 21 Feb 2017 15:00:05 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 45/54] commit: Add filter-node-name to block-commit X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, jcody@redhat.com, famz@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Management tools need to be able to know about every node in the graph and need a way to address them. This new option to block-commit allows the client to set a node-name for the automatically inserted filter driver, and at the same time serves as a witness that this version of qemu does automatically insert a filter driver. Signed-off-by: Kevin Wolf Reviewed-by: Max Reitz --- block/commit.c | 6 +++--- block/mirror.c | 3 ++- block/replication.c | 2 +- blockdev.c | 10 +++++++--- include/block/block_int.h | 13 ++++++++++--- qapi/block-core.json | 8 +++++++- qemu-img.c | 4 ++-- 7 files changed, 32 insertions(+), 14 deletions(-) diff --git a/block/commit.c b/block/commit.c index 92f7bd3..b9ec363 100644 --- a/block/commit.c +++ b/block/commit.c @@ -254,7 +254,7 @@ static BlockDriver bdrv_commit_top =3D { void commit_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, BlockDriverState *top, int64_t s= peed, BlockdevOnError on_error, const char *backing_file_str, - Error **errp) + const char *filter_node_name, Error **errp) { CommitBlockJob *s; BlockReopenQueue *reopen_queue =3D NULL; @@ -307,8 +307,8 @@ void commit_start(const char *job_id, BlockDriverState = *bs, =20 /* Insert commit_top block node above top, so we can block consistent = read * on the backing chain below it */ - commit_top_bs =3D bdrv_new_open_driver(&bdrv_commit_top, NULL, BDRV_O_= RDWR, - errp); + commit_top_bs =3D bdrv_new_open_driver(&bdrv_commit_top, filter_node_n= ame, + BDRV_O_RDWR, errp); if (commit_top_bs =3D=3D NULL) { goto fail; } diff --git a/block/mirror.c b/block/mirror.c index 2e1cd16..fa0c0e5 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1202,6 +1202,7 @@ void mirror_start(const char *job_id, BlockDriverStat= e *bs, void commit_active_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, int creation_flags, int64_t speed, BlockdevOnError on_error, + const char *filter_node_name, BlockCompletionFunc *cb, void *opaque, Error **er= rp, bool auto_complete) { @@ -1218,7 +1219,7 @@ void commit_active_start(const char *job_id, BlockDri= verState *bs, MIRROR_LEAVE_BACKING_CHAIN, on_error, on_error, true, cb, opaque, &local_err, &commit_active_job_driver, false, base, auto_complete, - NULL); + filter_node_name); if (local_err) { error_propagate(errp, local_err); goto error_restore_flags; diff --git a/block/replication.c b/block/replication.c index 91465cb..22f170f 100644 --- a/block/replication.c +++ b/block/replication.c @@ -644,7 +644,7 @@ static void replication_stop(ReplicationState *rs, bool= failover, Error **errp) s->replication_state =3D BLOCK_REPLICATION_FAILOVER; commit_active_start(NULL, s->active_disk->bs, s->secondary_disk->b= s, BLOCK_JOB_INTERNAL, 0, BLOCKDEV_ON_ERROR_REPOR= T, - replication_done, bs, errp, true); + NULL, replication_done, bs, errp, true); break; default: aio_context_release(aio_context); diff --git a/blockdev.c b/blockdev.c index 4314584..63b1ac4 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3028,6 +3028,7 @@ void qmp_block_commit(bool has_job_id, const char *jo= b_id, const char *device, bool has_top, const char *top, bool has_backing_file, const char *backing_file, bool has_speed, int64_t speed, + bool has_filter_node_name, const char *filter_node_n= ame, Error **errp) { BlockDriverState *bs; @@ -3043,6 +3044,9 @@ void qmp_block_commit(bool has_job_id, const char *jo= b_id, const char *device, if (!has_speed) { speed =3D 0; } + if (!has_filter_node_name) { + filter_node_name =3D NULL; + } =20 /* Important Note: * libvirt relies on the DeviceNotFound error class in order to probe= for @@ -3117,8 +3121,8 @@ void qmp_block_commit(bool has_job_id, const char *jo= b_id, const char *device, goto out; } commit_active_start(has_job_id ? job_id : NULL, bs, base_bs, - BLOCK_JOB_DEFAULT, speed, on_error, NULL, NULL, - &local_err, false); + BLOCK_JOB_DEFAULT, speed, on_error, + filter_node_name, NULL, NULL, &local_err, fals= e); } else { BlockDriverState *overlay_bs =3D bdrv_find_overlay(bs, top_bs); if (bdrv_op_is_blocked(overlay_bs, BLOCK_OP_TYPE_COMMIT_TARGET, er= rp)) { @@ -3126,7 +3130,7 @@ void qmp_block_commit(bool has_job_id, const char *jo= b_id, const char *device, } commit_start(has_job_id ? job_id : NULL, bs, base_bs, top_bs, spee= d, on_error, has_backing_file ? backing_file : NULL, - &local_err); + filter_node_name, &local_err); } if (local_err !=3D NULL) { error_propagate(errp, local_err); diff --git a/include/block/block_int.h b/include/block/block_int.h index 563b30c..a57c0bf 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -780,13 +780,16 @@ void stream_start(const char *job_id, BlockDriverStat= e *bs, * @speed: The maximum speed, in bytes per second, or 0 for unlimited. * @on_error: The action to take upon error. * @backing_file_str: String to use as the backing file in @top's overlay + * @filter_node_name: The node name that should be assigned to the filter + * driver that the commit job inserts into the graph above @top. NULL means + * that a node name should be autogenerated. * @errp: Error object. * */ void commit_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, BlockDriverState *top, int64_t s= peed, BlockdevOnError on_error, const char *backing_file_str, - Error **errp); + const char *filter_node_name, Error **errp); /** * commit_active_start: * @job_id: The id of the newly-created job, or %NULL to use the @@ -797,6 +800,9 @@ void commit_start(const char *job_id, BlockDriverState = *bs, * See @BlockJobCreateFlags * @speed: The maximum speed, in bytes per second, or 0 for unlimited. * @on_error: The action to take upon error. + * @filter_node_name: The node name that should be assigned to the filter + * driver that the commit job inserts into the graph above @bs. NULL means= that + * a node name should be autogenerated. * @cb: Completion function for the job. * @opaque: Opaque pointer value passed to @cb. * @errp: Error object. @@ -806,8 +812,9 @@ void commit_start(const char *job_id, BlockDriverState = *bs, void commit_active_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, int creation_flags, int64_t speed, BlockdevOnError on_error, - BlockCompletionFunc *cb, - void *opaque, Error **errp, bool auto_complete); + const char *filter_node_name, + BlockCompletionFunc *cb, void *opaque, Error **er= rp, + bool auto_complete); /* * mirror_start: * @job_id: The id of the newly-created job, or %NULL to use the diff --git a/qapi/block-core.json b/qapi/block-core.json index 893fa34..36d38b9 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1304,6 +1304,11 @@ # # @speed: #optional the maximum speed, in bytes per second # +# @filter-node-name: #optional the node name that should be assigned to the +# filter driver that the commit job inserts into the gr= aph +# above @device. If this option is not given, a node na= me is +# autogenerated. (Since: 2.9) +# # Returns: Nothing on success # If commit or stream is already active on this device, DeviceInU= se # If @device does not exist, DeviceNotFound @@ -1323,7 +1328,8 @@ ## { 'command': 'block-commit', 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', '*top': 'st= r', - '*backing-file': 'str', '*speed': 'int' } } + '*backing-file': 'str', '*speed': 'int', + '*filter-node-name': 'str' } } =20 ## # @drive-backup: diff --git a/qemu-img.c b/qemu-img.c index e20830f..fc72d21 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -939,8 +939,8 @@ static int img_commit(int argc, char **argv) aio_context =3D bdrv_get_aio_context(bs); aio_context_acquire(aio_context); commit_active_start("commit", bs, base_bs, BLOCK_JOB_DEFAULT, 0, - BLOCKDEV_ON_ERROR_REPORT, common_block_job_cb, &cb= i, - &local_err, false); + BLOCKDEV_ON_ERROR_REPORT, NULL, common_block_job_c= b, + &cbi, &local_err, false); aio_context_release(aio_context); if (local_err) { goto done; --=20 1.8.3.1