block: Accept node-name for blockdev-mirror

In order to remove the necessity to use BlockBackend names in the
external API, we want to allow node-names everywhere. This converts
blockdev-mirror to accept a node-name without lifting the restriction
that we're operating at a root node.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
Kevin Wolf 2016-06-23 14:20:24 +02:00
parent cef34eebf3
commit 07eec65272
3 changed files with 5 additions and 11 deletions

View File

@ -3627,21 +3627,13 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
Error **errp) Error **errp)
{ {
BlockDriverState *bs; BlockDriverState *bs;
BlockBackend *blk;
BlockDriverState *target_bs; BlockDriverState *target_bs;
AioContext *aio_context; AioContext *aio_context;
BlockMirrorBackingMode backing_mode = MIRROR_LEAVE_BACKING_CHAIN; BlockMirrorBackingMode backing_mode = MIRROR_LEAVE_BACKING_CHAIN;
Error *local_err = NULL; Error *local_err = NULL;
blk = blk_by_name(device); bs = qmp_get_root_bs(device, errp);
if (!blk) {
error_setg(errp, "Device '%s' not found", device);
return;
}
bs = blk_bs(blk);
if (!bs) { if (!bs) {
error_setg(errp, "Device '%s' has no media", device);
return; return;
} }

View File

@ -1277,7 +1277,8 @@
# @job-id: #optional identifier for the newly-created block job. If # @job-id: #optional identifier for the newly-created block job. If
# omitted, the device name will be used. (Since 2.7) # omitted, the device name will be used. (Since 2.7)
# #
# @device: the name of the device whose writes should be mirrored. # @device: The device name or node-name of a root node whose writes should be
# mirrored.
# #
# @target: the id or node-name of the block device to mirror to. This mustn't be # @target: the id or node-name of the block device to mirror to. This mustn't be
# attached to guest. # attached to guest.

View File

@ -1747,7 +1747,8 @@ Arguments:
- "job-id": Identifier for the newly-created block job. If omitted, - "job-id": Identifier for the newly-created block job. If omitted,
the device name will be used. (json-string, optional) the device name will be used. (json-string, optional)
- "device": device name to operate on (json-string) - "device": The device name or node-name of a root node whose writes should be
mirrored (json-string)
- "target": device name to mirror to (json-string) - "target": device name to mirror to (json-string)
- "replaces": the block driver node name to replace when finished - "replaces": the block driver node name to replace when finished
(json-string, optional) (json-string, optional)