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
|
#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)
|
void qmp_cont(Error **errp)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
BlockDriverState *bs;
|
||||||
|
|
||||||
if (runstate_needs_reset()) {
|
if (runstate_needs_reset()) {
|
||||||
error_setg(errp, "Resetting the Virtual Machine is required");
|
error_setg(errp, "Resetting the Virtual Machine is required");
|
||||||
@ -172,11 +157,16 @@ void qmp_cont(Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdrv_iterate(iostatus_bdrv_it, NULL);
|
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||||
bdrv_iterate(encrypted_bdrv_it, &local_err);
|
bdrv_iostatus_reset(bs);
|
||||||
if (local_err) {
|
}
|
||||||
error_propagate(errp, local_err);
|
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||||
return;
|
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)) {
|
if (runstate_check(RUN_STATE_INMIGRATE)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user