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:
parent
cef34eebf3
commit
07eec65272
10
blockdev.c
10
blockdev.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user