提交 8b7f6fbb 编写于 作者: L Luiz Capitulino

hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED

This commit changes hmp_cont() to loop through all block devices
and proactively set an encryption key for any encrypted device
missing a key.

This change is needed because QERR_DEVICE_ENCRYPTED is going to be
dropped by a future commit.
Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
上级 c75a1a8a
...@@ -612,34 +612,35 @@ void hmp_pmemsave(Monitor *mon, const QDict *qdict) ...@@ -612,34 +612,35 @@ void hmp_pmemsave(Monitor *mon, const QDict *qdict)
static void hmp_cont_cb(void *opaque, int err) static void hmp_cont_cb(void *opaque, int err)
{ {
Monitor *mon = opaque;
if (!err) { if (!err) {
hmp_cont(mon, NULL); qmp_cont(NULL);
} }
} }
static bool key_is_missing(const BlockInfo *bdev)
{
return (bdev->inserted && bdev->inserted->encryption_key_missing);
}
void hmp_cont(Monitor *mon, const QDict *qdict) void hmp_cont(Monitor *mon, const QDict *qdict)
{ {
BlockInfoList *bdev_list, *bdev;
Error *errp = NULL; Error *errp = NULL;
qmp_cont(&errp); bdev_list = qmp_query_block(NULL);
if (error_is_set(&errp)) { for (bdev = bdev_list; bdev; bdev = bdev->next) {
if (error_is_type(errp, QERR_DEVICE_ENCRYPTED)) { if (key_is_missing(bdev->value)) {
const char *device; monitor_read_block_device_key(mon, bdev->value->device,
hmp_cont_cb, NULL);
/* The device is encrypted. Ask the user for the password goto out;
and retry */
device = error_get_field(errp, "device");
assert(device != NULL);
monitor_read_block_device_key(mon, device, hmp_cont_cb, mon);
error_free(errp);
return;
} }
hmp_handle_error(mon, &errp);
} }
qmp_cont(&errp);
hmp_handle_error(mon, &errp);
out:
qapi_free_BlockInfoList(bdev_list);
} }
void hmp_system_wakeup(Monitor *mon, const QDict *qdict) void hmp_system_wakeup(Monitor *mon, const QDict *qdict)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册