hmp: Use blockdev-change-medium for change command
Use separate code paths for the two overloaded functions of the 'change' HMP command, and invoke the 'blockdev-change-medium' QMP command if used on a block device (by calling qmp_blockdev_change_medium()). Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
24fb413300
commit
1068674927
27
hmp.c
27
hmp.c
|
@ -1345,22 +1345,25 @@ void hmp_change(Monitor *mon, const QDict *qdict)
|
||||||
const char *arg = qdict_get_try_str(qdict, "arg");
|
const char *arg = qdict_get_try_str(qdict, "arg");
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
if (strcmp(device, "vnc") == 0 &&
|
if (strcmp(device, "vnc") == 0) {
|
||||||
(strcmp(target, "passwd") == 0 ||
|
if (strcmp(target, "passwd") == 0 ||
|
||||||
strcmp(target, "password") == 0)) {
|
strcmp(target, "password") == 0) {
|
||||||
if (!arg) {
|
if (!arg) {
|
||||||
monitor_read_password(mon, hmp_change_read_arg, NULL);
|
monitor_read_password(mon, hmp_change_read_arg, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qmp_change("vnc", target, !!arg, arg, &err);
|
||||||
|
} else {
|
||||||
|
qmp_blockdev_change_medium(device, target, !!arg, arg, &err);
|
||||||
|
if (err &&
|
||||||
|
error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
|
||||||
|
error_free(err);
|
||||||
|
monitor_read_block_device_key(mon, device, NULL, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qmp_change(device, target, !!arg, arg, &err);
|
|
||||||
if (err &&
|
|
||||||
error_get_class(err) == ERROR_CLASS_DEVICE_ENCRYPTED) {
|
|
||||||
error_free(err);
|
|
||||||
monitor_read_block_device_key(mon, device, NULL, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
hmp_handle_error(mon, &err);
|
hmp_handle_error(mon, &err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue