[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_EN
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED |
Date: |
Fri, 10 Aug 2012 14:43:50 -0300 |
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: Luiz Capitulino <address@hidden>
---
hmp.c | 37 +++++++++++++++++++------------------
1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/hmp.c b/hmp.c
index 25688ab..4efaf51 100644
--- a/hmp.c
+++ b/hmp.c
@@ -612,34 +612,35 @@ void hmp_pmemsave(Monitor *mon, const QDict *qdict)
static void hmp_cont_cb(void *opaque, int err)
{
- Monitor *mon = opaque;
-
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)
{
+ BlockInfoList *bdev_list, *bdev;
Error *errp = NULL;
- qmp_cont(&errp);
- if (error_is_set(&errp)) {
- if (error_is_type(errp, QERR_DEVICE_ENCRYPTED)) {
- const char *device;
-
- /* The device is encrypted. Ask the user for the password
- 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;
+ bdev_list = qmp_query_block(NULL);
+ for (bdev = bdev_list; bdev; bdev = bdev->next) {
+ if (key_is_missing(bdev->value)) {
+ monitor_read_block_device_key(mon, bdev->value->device,
+ hmp_cont_cb, NULL);
+ goto out;
}
- 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)
--
1.7.11.2.249.g31c7954.dirty
- [Qemu-devel] [PATCH 03/35] qerror: QERR_DEVICE_ENCRYPTED: change error message, (continued)
- [Qemu-devel] [PATCH 03/35] qerror: QERR_DEVICE_ENCRYPTED: change error message, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 04/35] qerror: reduce public exposure, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 06/35] qerror: avoid passing qerr pointer, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 07/35] qerror: QError: drop file, linenr, func, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 05/35] qerror: drop qerror_abort(), Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 08/35] qerror: qerror_format(): return an allocated string, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 09/35] qerror: don't delay error message construction, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 11/35] qmp: query-block: add 'encryption_key_missing' field, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 10/35] error: don't delay error message construction, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 13/35] hmp_change(): don't access DeviceEncrypted's data, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 14/35] net: inet_connect(), inet_connect_opts(): add in_progress argument, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 15/35] migration: don't rely on any QERR_SOCKET_*, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 16/35] qerror: drop QERR_SOCKET_CONNECT_IN_PROGRESS, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 23/35] qerror: qerror_table: don't use C99 struct initializers, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 24/35] error, qerror: add ErrorClass argument to error functions, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 28/35] error: drop unused functions, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 29/35] qmp: switch to the new error format on the wire, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 30/35] qemu-ga: switch to the new error format on the wire, Luiz Capitulino, 2012/08/10
- [Qemu-devel] [PATCH 31/35] error: drop error_get_qobject()/error_set_qobject(), Luiz Capitulino, 2012/08/10