On 01.07.2016 17:52, Alberto Garcia wrote: > This patch adds a new optional 'job-id' parameter to 'blockdev-mirror' > and 'drive-mirror', allowing the user to specify the ID of the block > job to be created. > > The HMP 'drive_mirror' command remains unchanged. > > Signed-off-by: Alberto Garcia <be...@igalia.com> > Reviewed-by: Max Reitz <mre...@redhat.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> > --- > block/mirror.c | 15 ++++++++------- > blockdev.c | 15 ++++++++------- > hmp.c | 2 +- > include/block/block_int.h | 6 ++++-- > qapi/block-core.json | 10 +++++++--- > qmp-commands.hx | 8 +++++--- > 6 files changed, 33 insertions(+), 23 deletions(-) >
[...] > diff --git a/include/block/block_int.h b/include/block/block_int.h > index 549b1ed..dd45fec 100644 > --- a/include/block/block_int.h > +++ b/include/block/block_int.h > @@ -680,6 +680,8 @@ void commit_active_start(BlockDriverState *bs, > BlockDriverState *base, > void *opaque, Error **errp); > /* > * mirror_start: > + * @job_id: The id of the newly-created job, or %NULL to have one > + * generated automatically. No, NULL to use the device name (same in the three following patches). > * @bs: Block device to operate on. > * @target: Block device to write to. > * @replaces: Block graph node name to replace once the mirror is done. Can > @@ -701,8 +703,8 @@ void commit_active_start(BlockDriverState *bs, > BlockDriverState *base, > * manually completed. At the end of a successful mirroring job, > * @bs will be switched to read from @target. > */ > -void mirror_start(BlockDriverState *bs, BlockDriverState *target, > - const char *replaces, > +void mirror_start(const char *job_id, BlockDriverState *bs, > + BlockDriverState *target, const char *replaces, > int64_t speed, uint32_t granularity, int64_t buf_size, > MirrorSyncMode mode, BlockMirrorBackingMode backing_mode, > BlockdevOnError on_source_error, > diff --git a/qapi/block-core.json b/qapi/block-core.json > index 98a20d2..6f015c8 100644 > --- a/qapi/block-core.json > +++ b/qapi/block-core.json > @@ -1108,6 +1108,8 @@ > # > # Start mirroring a block device's writes to a new destination. > # > +# @job-id: #optional identifier for the newly-created block job (Since 2.7) You should probably mention that this defaults to @device (as below and in the three following patches). Max > +# > # @device: the name of the device whose writes should be mirrored. > # > # @target: the target of the new image. If the file exists, or if it > @@ -1160,8 +1162,8 @@ > # Since 1.3 > ## > { 'command': 'drive-mirror', > - 'data': { 'device': 'str', 'target': 'str', '*format': 'str', > - '*node-name': 'str', '*replaces': 'str', > + 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', > + '*format': 'str', '*node-name': 'str', '*replaces': 'str', > 'sync': 'MirrorSyncMode', '*mode': 'NewImageMode', > '*speed': 'int', '*granularity': 'uint32', > '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', > @@ -1243,6 +1245,8 @@ > # > # Start mirroring a block device's writes to a new destination. > # > +# @job-id: #optional identifier for the newly-created block job (Since 2.7) > +# > # @device: the name of the device whose writes should be mirrored. > # > # @target: the id or node-name of the block device to mirror to. This > mustn't be > @@ -1279,7 +1283,7 @@ > # Since 2.6 > ## > { 'command': 'blockdev-mirror', > - 'data': { 'device': 'str', 'target': 'str', > + 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', > '*replaces': 'str', > 'sync': 'MirrorSyncMode', > '*speed': 'int', '*granularity': 'uint32', > diff --git a/qmp-commands.hx b/qmp-commands.hx > index 6937e83..d9a9510 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -1656,8 +1656,8 @@ EQMP > > { > .name = "drive-mirror", > - .args_type = "sync:s,device:B,target:s,speed:i?,mode:s?,format:s?," > - "node-name:s?,replaces:s?," > + .args_type = "job-id:s?,sync:s,device:B,target:s,speed:i?,mode:s?," > + "format:s?,node-name:s?,replaces:s?," > "on-source-error:s?,on-target-error:s?," > "unmap:b?," > "granularity:i?,buf-size:i?", > @@ -1677,6 +1677,7 @@ of the source. > > Arguments: > > +- "job-id": identifier for the newly-created block job (json-string, > optional) > - "device": device name to operate on (json-string) > - "target": name of new image file (json-string) > - "format": format of new image (json-string, optional) > @@ -1720,7 +1721,7 @@ EQMP > > { > .name = "blockdev-mirror", > - .args_type = "sync:s,device:B,target:B,replaces:s?,speed:i?," > + .args_type = > "job-id:s?,sync:s,device:B,target:B,replaces:s?,speed:i?," > "on-source-error:s?,on-target-error:s?," > "granularity:i?,buf-size:i?", > .mhandler.cmd_new = qmp_marshal_blockdev_mirror, > @@ -1735,6 +1736,7 @@ specifies the target of mirror operation. > > Arguments: > > +- "job-id": identifier for the newly-created block job (json-string, > optional) > - "device": device name to operate on (json-string) > - "target": device name to mirror to (json-string) > - "replaces": the block driver node name to replace when finished >
signature.asc
Description: OpenPGP digital signature