All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 09/32] commit: Add 'job-id' parameter to 'block-commit'
Date: Fri,  8 Jul 2016 19:21:21 +0200	[thread overview]
Message-ID: <1467998504-15744-10-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1467998504-15744-1-git-send-email-kwolf@redhat.com>

From: Alberto Garcia <berto@igalia.com>

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 <berto@igalia.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block/commit.c            |  7 ++++---
 block/mirror.c            |  6 +++---
 blockdev.c                |  9 +++++----
 include/block/block_int.h | 16 ++++++++++------
 qapi/block-core.json      |  5 ++++-
 qemu-img.c                |  2 +-
 qmp-commands.hx           |  4 +++-
 7 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/block/commit.c b/block/commit.c
index 137bb03..23368fa 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 d6f1d4d..aa23dc2 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 db364bb..8054146 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -666,6 +666,8 @@ void stream_start(const char *job_id, BlockDriverState *bs,
 
 /**
  * commit_start:
+ * @job_id: The id of the newly-created job, or %NULL to use the
+ * device name of @bs.
  * @bs: Active block device.
  * @top: Top block device to be committed.
  * @base: Block device that will be written into, and become the new top.
@@ -677,12 +679,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 use the
+ * device name of @bs.
  * @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.
@@ -692,8 +696,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 94f4733..1e4b16d 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1010,6 +1010,9 @@
 # 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. If
+#          omitted, the device name will be used. (Since 2.7)
+#
 # @device:  the name of the device
 #
 # @base:   #optional The file name of the backing image to write data into.
@@ -1061,7 +1064,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 ea5970b..a162f34 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -920,7 +920,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 d61ea20..c46c65c 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -1151,7 +1151,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,
     },
 
@@ -1164,6 +1164,8 @@ data between 'top' and 'base' into 'base'.
 
 Arguments:
 
+- "job-id": Identifier for the newly-created block job. If omitted,
+            the device name will be used. (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
-- 
1.8.3.1

  parent reply	other threads:[~2016-07-08 17:22 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-08 17:21 [Qemu-devel] [PULL 00/32] Block layer patches Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 01/32] stream: Fix prototype of stream_start() Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 02/32] blockjob: Update description of the 'id' field Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 03/32] blockjob: Add block_job_get() Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 04/32] block: Use block_job_get() in find_block_job() Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 05/32] blockjob: Add 'job_id' parameter to block_job_create() Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 06/32] mirror: Add 'job-id' parameter to 'blockdev-mirror' and 'drive-mirror' Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 07/32] backup: Add 'job-id' parameter to 'blockdev-backup' and 'drive-backup' Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 08/32] stream: Add 'job-id' parameter to 'block-stream' Kevin Wolf
2016-07-08 17:21 ` Kevin Wolf [this message]
2016-07-08 17:21 ` [Qemu-devel] [PULL 10/32] qemu-img: Set the ID of the block job in img_commit() Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 11/32] blockjob: Update description of the 'device' field in the QMP API Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 12/32] osdep: Introduce qemu_dup Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 13/32] raw-posix: Use qemu_dup Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 14/32] coroutine: use QSIMPLEQ instead of QTAILQ Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 15/32] test-coroutine: prepare for the next patch Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 16/32] coroutine: move entry argument to qemu_coroutine_create Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 17/32] block/qdev: Allow node name for drive properties Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 18/32] block/qdev: Allow configuring WCE with qdev properties Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 19/32] commit: Fix use of error handling policy Kevin Wolf
2016-07-08 21:36   ` [Qemu-devel] [Qemu-block] " Eric Blake
2016-07-11 11:22     ` Kevin Wolf
2016-07-11 11:40       ` [Qemu-devel] " Paolo Bonzini
2016-07-11 12:37         ` Kevin Wolf
2016-07-11 11:57       ` [Qemu-devel] [Qemu-block] " Max Reitz
2016-07-08 17:21 ` [Qemu-devel] [PULL 20/32] block/qdev: Allow configuring rerror/werror with qdev properties Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 21/32] qemu-iotests: Test setting WCE with qdev Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 22/32] block: Remove BB options from blockdev-add Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 23/32] qemu-img: Use strerror() for generic resize error Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 24/32] qcow2: Avoid making the L1 table too big Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 25/32] qemu-io: Use correct range limitations Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 26/32] qcow2: Fix qcow2_get_cluster_offset() Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 27/32] Improve block job rate limiting for small bandwidth values Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 28/32] vmdk: fix metadata write regression Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 29/32] blockdev: Fix regression with the default naming of throttling groups Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 30/32] qemu-iotests: Test " Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 31/32] hmp: use snapshot name to determine whether a snapshot is 'fully available' Kevin Wolf
2016-07-08 17:21 ` [Qemu-devel] [PULL 32/32] hmp: show all of snapshot info on every block dev in output of 'info snapshots' Kevin Wolf
2016-07-11 16:14 ` [Qemu-devel] [PULL 00/32] Block layer patches Peter Maydell
2016-07-11 16:25   ` Eric Blake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1467998504-15744-10-git-send-email-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.