qmp: Don't use error_is_set() to suppress additional errors
Using error_is_set(errp) that way can sweep programming errors under the carpet when we get called incorrectly with an error set. encrypted_bdrv_it() does it, because there's no way to make bdrv_iterate() break its loop. Actually safe, because qmp_cont() clears the error before the loop. Clean it up anyway: replace bdrv_iterate() by bdrv_next(), break the loop on error. Replace both occurrences, for consistency. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
66ef8bd9c1
commit
ab31979a7e
32
qmp.c
32
qmp.c
@ -146,24 +146,9 @@ SpiceInfo *qmp_query_spice(Error **errp)
|
||||
};
|
||||
#endif
|
||||
|
||||
static void iostatus_bdrv_it(void *opaque, BlockDriverState *bs)
|
||||
{
|
||||
bdrv_iostatus_reset(bs);
|
||||
}
|
||||
|
||||
static void encrypted_bdrv_it(void *opaque, BlockDriverState *bs)
|
||||
{
|
||||
Error **errp = opaque;
|
||||
|
||||
if (!error_is_set(errp) && bdrv_key_required(bs)) {
|
||||
error_set(errp, QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs),
|
||||
bdrv_get_encrypted_filename(bs));
|
||||
}
|
||||
}
|
||||
|
||||
void qmp_cont(Error **errp)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
BlockDriverState *bs;
|
||||
|
||||
if (runstate_needs_reset()) {
|
||||
error_setg(errp, "Resetting the Virtual Machine is required");
|
||||
@ -172,11 +157,16 @@ void qmp_cont(Error **errp)
|
||||
return;
|
||||
}
|
||||
|
||||
bdrv_iterate(iostatus_bdrv_it, NULL);
|
||||
bdrv_iterate(encrypted_bdrv_it, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
return;
|
||||
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||
bdrv_iostatus_reset(bs);
|
||||
}
|
||||
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||
if (bdrv_key_required(bs)) {
|
||||
error_set(errp, QERR_DEVICE_ENCRYPTED,
|
||||
bdrv_get_device_name(bs),
|
||||
bdrv_get_encrypted_filename(bs));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (runstate_check(RUN_STATE_INMIGRATE)) {
|
||||
|
Loading…
Reference in New Issue
Block a user