block: Accept device model name for blockdev-change-medium
In order to remove the need for BlockBackend names in the external API, we want to allow qdev device names in all device related commands. This converts blockdev-change-medium to accept a qdev device name. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
fbe2d8163e
commit
70e2cb3bd7
18
blockdev.c
18
blockdev.c
@ -2540,7 +2540,9 @@ void qmp_x_blockdev_insert_medium(bool has_device, const char *device,
|
|||||||
qmp_blockdev_insert_anon_medium(blk, bs, errp);
|
qmp_blockdev_insert_anon_medium(blk, bs, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qmp_blockdev_change_medium(const char *device, const char *filename,
|
void qmp_blockdev_change_medium(bool has_device, const char *device,
|
||||||
|
bool has_id, const char *id,
|
||||||
|
const char *filename,
|
||||||
bool has_format, const char *format,
|
bool has_format, const char *format,
|
||||||
bool has_read_only,
|
bool has_read_only,
|
||||||
BlockdevChangeReadOnlyMode read_only,
|
BlockdevChangeReadOnlyMode read_only,
|
||||||
@ -2553,10 +2555,10 @@ void qmp_blockdev_change_medium(const char *device, const char *filename,
|
|||||||
QDict *options = NULL;
|
QDict *options = NULL;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
blk = blk_by_name(device);
|
blk = qmp_get_blk(has_device ? device : NULL,
|
||||||
|
has_id ? id : NULL,
|
||||||
|
errp);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
|
|
||||||
"Device '%s' not found", device);
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2604,7 +2606,9 @@ void qmp_blockdev_change_medium(const char *device, const char *filename,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = do_open_tray(device, NULL, false, &err);
|
rc = do_open_tray(has_device ? device : NULL,
|
||||||
|
has_id ? id : NULL,
|
||||||
|
false, &err);
|
||||||
if (rc && rc != -ENOSYS) {
|
if (rc && rc != -ENOSYS) {
|
||||||
error_propagate(errp, err);
|
error_propagate(errp, err);
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -2612,7 +2616,7 @@ void qmp_blockdev_change_medium(const char *device, const char *filename,
|
|||||||
error_free(err);
|
error_free(err);
|
||||||
err = NULL;
|
err = NULL;
|
||||||
|
|
||||||
qmp_x_blockdev_remove_medium(true, device, false, NULL, errp);
|
qmp_x_blockdev_remove_medium(has_device, device, has_id, id, errp);
|
||||||
if (err) {
|
if (err) {
|
||||||
error_propagate(errp, err);
|
error_propagate(errp, err);
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -2626,7 +2630,7 @@ void qmp_blockdev_change_medium(const char *device, const char *filename,
|
|||||||
|
|
||||||
blk_apply_root_state(blk, medium_bs);
|
blk_apply_root_state(blk, medium_bs);
|
||||||
|
|
||||||
qmp_blockdev_close_tray(true, device, false, NULL, errp);
|
qmp_blockdev_close_tray(has_device, device, has_id, id, errp);
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
/* If the medium has been inserted, the device has its own reference, so
|
/* If the medium has been inserted, the device has its own reference, so
|
||||||
|
@ -3458,7 +3458,9 @@ and loading a new image file which is inserted as the new medium.
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
- "device": device name (json-string)
|
- "device": block device name (deprecated, use @id instead)
|
||||||
|
(json-string, optional)
|
||||||
|
- "id": the name or QOM path of the guest device (json-string, optional)
|
||||||
- "filename": filename of the new image (json-string)
|
- "filename": filename of the new image (json-string)
|
||||||
- "format": format of the new image (json-string, optional)
|
- "format": format of the new image (json-string, optional)
|
||||||
- "read-only-mode": new read-only mode (json-string, optional)
|
- "read-only-mode": new read-only mode (json-string, optional)
|
||||||
@ -3469,7 +3471,7 @@ Examples:
|
|||||||
1. Change a removable medium
|
1. Change a removable medium
|
||||||
|
|
||||||
-> { "execute": "blockdev-change-medium",
|
-> { "execute": "blockdev-change-medium",
|
||||||
"arguments": { "device": "ide1-cd0",
|
"arguments": { "id": "ide0-1-0",
|
||||||
"filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
|
"filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
|
||||||
"format": "raw" } }
|
"format": "raw" } }
|
||||||
<- { "return": {} }
|
<- { "return": {} }
|
||||||
@ -3477,7 +3479,7 @@ Examples:
|
|||||||
2. Load a read-only medium into a writable drive
|
2. Load a read-only medium into a writable drive
|
||||||
|
|
||||||
-> { "execute": "blockdev-change-medium",
|
-> { "execute": "blockdev-change-medium",
|
||||||
"arguments": { "device": "isa-fd0",
|
"arguments": { "id": "floppyA",
|
||||||
"filename": "/srv/images/ro.img",
|
"filename": "/srv/images/ro.img",
|
||||||
"format": "raw",
|
"format": "raw",
|
||||||
"read-only-mode": "retain" } }
|
"read-only-mode": "retain" } }
|
||||||
@ -3487,7 +3489,7 @@ Examples:
|
|||||||
"desc": "Could not open '/srv/images/ro.img': Permission denied" } }
|
"desc": "Could not open '/srv/images/ro.img': Permission denied" } }
|
||||||
|
|
||||||
-> { "execute": "blockdev-change-medium",
|
-> { "execute": "blockdev-change-medium",
|
||||||
"arguments": { "device": "isa-fd0",
|
"arguments": { "id": "floppyA",
|
||||||
"filename": "/srv/images/ro.img",
|
"filename": "/srv/images/ro.img",
|
||||||
"format": "raw",
|
"format": "raw",
|
||||||
"read-only-mode": "read-only" } }
|
"read-only-mode": "read-only" } }
|
||||||
|
5
hmp.c
5
hmp.c
@ -1422,8 +1422,9 @@ void hmp_change(Monitor *mon, const QDict *qdict)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qmp_blockdev_change_medium(device, target, !!arg, arg,
|
qmp_blockdev_change_medium(true, device, false, NULL, target,
|
||||||
!!read_only, read_only_mode, &err);
|
!!arg, arg, !!read_only, read_only_mode,
|
||||||
|
&err);
|
||||||
if (err &&
|
if (err &&
|
||||||
error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
|
error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
|
||||||
error_free(err);
|
error_free(err);
|
||||||
|
@ -2470,7 +2470,10 @@
|
|||||||
# combines blockdev-open-tray, x-blockdev-remove-medium,
|
# combines blockdev-open-tray, x-blockdev-remove-medium,
|
||||||
# x-blockdev-insert-medium and blockdev-close-tray).
|
# x-blockdev-insert-medium and blockdev-close-tray).
|
||||||
#
|
#
|
||||||
# @device: block device name
|
# @device: #optional Block device name (deprecated, use @id instead)
|
||||||
|
#
|
||||||
|
# @id: #optional The name or QOM path of the guest device
|
||||||
|
# (since: 2.8)
|
||||||
#
|
#
|
||||||
# @filename: filename of the new image to be loaded
|
# @filename: filename of the new image to be loaded
|
||||||
#
|
#
|
||||||
@ -2483,7 +2486,8 @@
|
|||||||
# Since: 2.5
|
# Since: 2.5
|
||||||
##
|
##
|
||||||
{ 'command': 'blockdev-change-medium',
|
{ 'command': 'blockdev-change-medium',
|
||||||
'data': { 'device': 'str',
|
'data': { '*device': 'str',
|
||||||
|
'*id': 'str',
|
||||||
'filename': 'str',
|
'filename': 'str',
|
||||||
'*format': 'str',
|
'*format': 'str',
|
||||||
'*read-only-mode': 'BlockdevChangeReadOnlyMode' } }
|
'*read-only-mode': 'BlockdevChangeReadOnlyMode' } }
|
||||||
|
4
qmp.c
4
qmp.c
@ -436,8 +436,8 @@ void qmp_change(const char *device, const char *target,
|
|||||||
if (strcmp(device, "vnc") == 0) {
|
if (strcmp(device, "vnc") == 0) {
|
||||||
qmp_change_vnc(target, has_arg, arg, errp);
|
qmp_change_vnc(target, has_arg, arg, errp);
|
||||||
} else {
|
} else {
|
||||||
qmp_blockdev_change_medium(device, target, has_arg, arg, false, 0,
|
qmp_blockdev_change_medium(true, device, false, NULL, target,
|
||||||
errp);
|
has_arg, arg, false, 0, errp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1119,8 +1119,10 @@ QemuCocoaView *cocoaView;
|
|||||||
}
|
}
|
||||||
|
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
qmp_blockdev_change_medium([drive cStringUsingEncoding:
|
qmp_blockdev_change_medium(true,
|
||||||
|
[drive cStringUsingEncoding:
|
||||||
NSASCIIStringEncoding],
|
NSASCIIStringEncoding],
|
||||||
|
false, NULL,
|
||||||
[file cStringUsingEncoding:
|
[file cStringUsingEncoding:
|
||||||
NSASCIIStringEncoding],
|
NSASCIIStringEncoding],
|
||||||
true, "raw",
|
true, "raw",
|
||||||
|
Loading…
Reference in New Issue
Block a user