From patchwork Fri Jul 1 15:52:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alberto Garcia X-Patchwork-Id: 643096 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rh1F35pgSz9t0d for ; Sat, 2 Jul 2016 01:54:31 +1000 (AEST) Received: from localhost ([::1]:34102 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bJ0lx-0001Lf-So for incoming@patchwork.ozlabs.org; Fri, 01 Jul 2016 11:54:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35656) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bJ0kl-0000LY-Jb for qemu-devel@nongnu.org; Fri, 01 Jul 2016 11:53:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bJ0kh-0004kK-7k for qemu-devel@nongnu.org; Fri, 01 Jul 2016 11:53:14 -0400 Received: from smtp3.mundo-r.com ([212.51.32.191]:41606 helo=smtp4.mundo-r.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bJ0kg-0004Xv-SB; Fri, 01 Jul 2016 11:53:11 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2D9AQAhkXZX/5tjdVtdHQGDIIFSjSqXOgYFAYEQkUGCD4F7hhgCgTA4FAEBAQEBAQFlJ4RNAgR5ED8SPBsZiDQBxEIBAQgnhWCCR4xpBY4BcIofjkSJS4VfkAkeNoIFAxyBT2uIdAEBAQ X-IPAS-Result: A2D9AQAhkXZX/5tjdVtdHQGDIIFSjSqXOgYFAYEQkUGCD4F7hhgCgTA4FAEBAQEBAQFlJ4RNAgR5ED8SPBsZiDQBxEIBAQgnhWCCR4xpBY4BcIofjkSJS4VfkAkeNoIFAxyBT2uIdAEBAQ X-IronPort-AV: E=Sophos;i="5.26,557,1459807200"; d="scan'208";a="146521275" Received: from fanzine.igalia.com ([91.117.99.155]) by smtp4.mundo-r.com with ESMTP; 01 Jul 2016 17:52:29 +0200 Received: from [194.100.51.2] (helo=perseus.local) by fanzine.igalia.com with esmtpsa (Cipher TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim) id 1bJ0k1-0003iG-4F; Fri, 01 Jul 2016 17:52:29 +0200 Received: from berto by perseus.local with local (Exim 4.87) (envelope-from ) id 1bJ0jl-0005Pb-B2; Fri, 01 Jul 2016 18:52:13 +0300 From: Alberto Garcia To: qemu-devel@nongnu.org Date: Fri, 1 Jul 2016 18:52:07 +0300 Message-Id: <48bdf3ad3ff8ee6b68ecb87ba76147aa0cbfeeea.1467386530.git.berto@igalia.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: References: In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 212.51.32.191 Subject: [Qemu-devel] [PATCH v3 09/11] commit: Add 'job-id' parameter 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: Kevin Wolf , Alberto Garcia , qemu-block@nongnu.org, Jeff Cody , Max Reitz , John Snow Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" This patch adds a new optional 'job-id' parameter to 'block-commit', allowing the user to specify the ID of the block job to be created. Signed-off-by: Alberto Garcia Reviewed-by: Max Reitz --- block/commit.c | 7 ++++--- block/mirror.c | 6 +++--- blockdev.c | 9 +++++---- include/block/block_int.h | 16 ++++++++++------ qapi/block-core.json | 4 +++- qemu-img.c | 2 +- qmp-commands.hx | 3 ++- 7 files changed, 28 insertions(+), 19 deletions(-) diff --git a/block/commit.c b/block/commit.c index 3535ba7..6e576d9 100644 --- a/block/commit.c +++ b/block/commit.c @@ -211,8 +211,8 @@ static const BlockJobDriver commit_job_driver = { .set_speed = commit_set_speed, }; -void commit_start(BlockDriverState *bs, BlockDriverState *base, - BlockDriverState *top, int64_t speed, +void commit_start(const char *job_id, BlockDriverState *bs, + BlockDriverState *base, BlockDriverState *top, int64_t speed, BlockdevOnError on_error, BlockCompletionFunc *cb, void *opaque, const char *backing_file_str, Error **errp) { @@ -236,7 +236,8 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, return; } - s = block_job_create(NULL, &commit_job_driver, bs, speed, cb, opaque, errp); + s = block_job_create(job_id, &commit_job_driver, bs, speed, + cb, opaque, errp); if (!s) { return; } diff --git a/block/mirror.c b/block/mirror.c index 702a686..705fbc0 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -931,8 +931,8 @@ void mirror_start(const char *job_id, BlockDriverState *bs, &mirror_job_driver, is_none_mode, base); } -void commit_active_start(BlockDriverState *bs, BlockDriverState *base, - int64_t speed, +void commit_active_start(const char *job_id, BlockDriverState *bs, + BlockDriverState *base, int64_t speed, BlockdevOnError on_error, BlockCompletionFunc *cb, void *opaque, Error **errp) @@ -973,7 +973,7 @@ void commit_active_start(BlockDriverState *bs, BlockDriverState *base, } } - mirror_start_job(NULL, bs, base, NULL, speed, 0, 0, + mirror_start_job(job_id, bs, base, NULL, speed, 0, 0, MIRROR_LEAVE_BACKING_CHAIN, on_error, on_error, false, cb, opaque, &local_err, &commit_active_job_driver, false, base); diff --git a/blockdev.c b/blockdev.c index d0f6a18..6b1f6ef 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3077,7 +3077,7 @@ out: aio_context_release(aio_context); } -void qmp_block_commit(const char *device, +void qmp_block_commit(bool has_job_id, const char *job_id, const char *device, bool has_base, const char *base, bool has_top, const char *top, bool has_backing_file, const char *backing_file, @@ -3168,10 +3168,11 @@ void qmp_block_commit(const char *device, " but 'top' is the active layer"); goto out; } - commit_active_start(bs, base_bs, speed, on_error, block_job_cb, - bs, &local_err); + commit_active_start(has_job_id ? job_id : NULL, bs, base_bs, speed, + on_error, block_job_cb, bs, &local_err); } else { - commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs, + commit_start(has_job_id ? job_id : NULL, bs, base_bs, top_bs, speed, + on_error, block_job_cb, bs, has_backing_file ? backing_file : NULL, &local_err); } if (local_err != NULL) { diff --git a/include/block/block_int.h b/include/block/block_int.h index 9c0ecf5..e77f8fc 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -649,6 +649,8 @@ void stream_start(const char *job_id, BlockDriverState *bs, /** * commit_start: + * @job_id: The id of the newly-created job, or %NULL to have one + * generated automatically. * @bs: Active block device. * @top: Top block device to be committed. * @base: Block device that will be written into, and become the new top. @@ -660,12 +662,14 @@ void stream_start(const char *job_id, BlockDriverState *bs, * @errp: Error object. * */ -void commit_start(BlockDriverState *bs, BlockDriverState *base, - BlockDriverState *top, int64_t speed, - BlockdevOnError on_error, BlockCompletionFunc *cb, - void *opaque, const char *backing_file_str, Error **errp); +void commit_start(const char *job_id, BlockDriverState *bs, + BlockDriverState *base, BlockDriverState *top, int64_t speed, + BlockdevOnError on_error, BlockCompletionFunc *cb, + void *opaque, const char *backing_file_str, Error **errp); /** * commit_active_start: + * @job_id: The id of the newly-created job, or %NULL to have one + * generated automatically. * @bs: Active block device to be committed. * @base: Block device that will be written into, and become the new top. * @speed: The maximum speed, in bytes per second, or 0 for unlimited. @@ -675,8 +679,8 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, * @errp: Error object. * */ -void commit_active_start(BlockDriverState *bs, BlockDriverState *base, - int64_t speed, +void commit_active_start(const char *job_id, BlockDriverState *bs, + BlockDriverState *base, int64_t speed, BlockdevOnError on_error, BlockCompletionFunc *cb, void *opaque, Error **errp); diff --git a/qapi/block-core.json b/qapi/block-core.json index 14073f7..f754c29 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1008,6 +1008,8 @@ # Live commit of data from overlay image nodes into backing nodes - i.e., # writes data between 'top' and 'base' into 'base'. # +# @job-id: #optional identifier for the newly-created block job (Since 2.7) +# # @device: the name of the device # # @base: #optional The file name of the backing image to write data into. @@ -1059,7 +1061,7 @@ # ## { 'command': 'block-commit', - 'data': { 'device': 'str', '*base': 'str', '*top': 'str', + 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', '*top': 'str', '*backing-file': 'str', '*speed': 'int' } } ## diff --git a/qemu-img.c b/qemu-img.c index 3322a1e..a78f598 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -921,7 +921,7 @@ static int img_commit(int argc, char **argv) .bs = bs, }; - commit_active_start(bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT, + commit_active_start(NULL, bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT, common_block_job_cb, &cbi, &local_err); if (local_err) { goto done; diff --git a/qmp-commands.hx b/qmp-commands.hx index 2a550df..d546955 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -1150,7 +1150,7 @@ EQMP { .name = "block-commit", - .args_type = "device:B,base:s?,top:s?,backing-file:s?,speed:o?", + .args_type = "job-id:s?,device:B,base:s?,top:s?,backing-file:s?,speed:o?", .mhandler.cmd_new = qmp_marshal_block_commit, }, @@ -1163,6 +1163,7 @@ data between 'top' and 'base' into 'base'. Arguments: +- "job-id": identifier for the newly-created block job (json-string, optional) - "device": The device's ID, must be unique (json-string) - "base": The file name of the backing image to write data into. If not specified, this is the deepest backing image