block/qcow2: qcow2_get_specific_info(): drop error propagation
Don't use error propagation in qcow2_get_specific_info(). For this refactor qcow2_get_bitmap_info_list, its current interface is rather weird. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20210202124956.63146-9-vsementsov@virtuozzo.com> Reviewed-by: Alberto Garcia <berto@igalia.com> [eblake: separate local 'tail' variable from 'info_list' parameter] Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
775d0c0508
commit
83bad8cbf5
@ -1089,30 +1089,32 @@ static Qcow2BitmapInfoFlagsList *get_bitmap_info_flags(uint32_t flags)
|
|||||||
/*
|
/*
|
||||||
* qcow2_get_bitmap_info_list()
|
* qcow2_get_bitmap_info_list()
|
||||||
* Returns a list of QCOW2 bitmap details.
|
* Returns a list of QCOW2 bitmap details.
|
||||||
* In case of no bitmaps, the function returns NULL and
|
* On success return true with info_list set (note, that if there are no
|
||||||
* the @errp parameter is not set.
|
* bitmaps, info_list is set to NULL).
|
||||||
* When bitmap information can not be obtained, the function returns
|
* On failure return false with errp set.
|
||||||
* NULL and the @errp parameter is set.
|
|
||||||
*/
|
*/
|
||||||
Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(BlockDriverState *bs,
|
bool qcow2_get_bitmap_info_list(BlockDriverState *bs,
|
||||||
Error **errp)
|
Qcow2BitmapInfoList **info_list, Error **errp)
|
||||||
{
|
{
|
||||||
BDRVQcow2State *s = bs->opaque;
|
BDRVQcow2State *s = bs->opaque;
|
||||||
Qcow2BitmapList *bm_list;
|
Qcow2BitmapList *bm_list;
|
||||||
Qcow2Bitmap *bm;
|
Qcow2Bitmap *bm;
|
||||||
Qcow2BitmapInfoList *list = NULL;
|
Qcow2BitmapInfoList **tail;
|
||||||
Qcow2BitmapInfoList **tail = &list;
|
|
||||||
|
|
||||||
if (s->nb_bitmaps == 0) {
|
if (s->nb_bitmaps == 0) {
|
||||||
return NULL;
|
*info_list = NULL;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bm_list = bitmap_list_load(bs, s->bitmap_directory_offset,
|
bm_list = bitmap_list_load(bs, s->bitmap_directory_offset,
|
||||||
s->bitmap_directory_size, errp);
|
s->bitmap_directory_size, errp);
|
||||||
if (bm_list == NULL) {
|
if (!bm_list) {
|
||||||
return NULL;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*info_list = NULL;
|
||||||
|
tail = info_list;
|
||||||
|
|
||||||
QSIMPLEQ_FOREACH(bm, bm_list, entry) {
|
QSIMPLEQ_FOREACH(bm, bm_list, entry) {
|
||||||
Qcow2BitmapInfo *info = g_new0(Qcow2BitmapInfo, 1);
|
Qcow2BitmapInfo *info = g_new0(Qcow2BitmapInfo, 1);
|
||||||
info->granularity = 1U << bm->granularity_bits;
|
info->granularity = 1U << bm->granularity_bits;
|
||||||
@ -1123,7 +1125,7 @@ Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(BlockDriverState *bs,
|
|||||||
|
|
||||||
bitmap_list_free(bm_list);
|
bitmap_list_free(bm_list);
|
||||||
|
|
||||||
return list;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp)
|
int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp)
|
||||||
|
@ -5066,12 +5066,10 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs,
|
|||||||
BDRVQcow2State *s = bs->opaque;
|
BDRVQcow2State *s = bs->opaque;
|
||||||
ImageInfoSpecific *spec_info;
|
ImageInfoSpecific *spec_info;
|
||||||
QCryptoBlockInfo *encrypt_info = NULL;
|
QCryptoBlockInfo *encrypt_info = NULL;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
if (s->crypto != NULL) {
|
if (s->crypto != NULL) {
|
||||||
encrypt_info = qcrypto_block_get_info(s->crypto, &local_err);
|
encrypt_info = qcrypto_block_get_info(s->crypto, errp);
|
||||||
if (local_err) {
|
if (!encrypt_info) {
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5088,9 +5086,7 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs,
|
|||||||
};
|
};
|
||||||
} else if (s->qcow_version == 3) {
|
} else if (s->qcow_version == 3) {
|
||||||
Qcow2BitmapInfoList *bitmaps;
|
Qcow2BitmapInfoList *bitmaps;
|
||||||
bitmaps = qcow2_get_bitmap_info_list(bs, &local_err);
|
if (!qcow2_get_bitmap_info_list(bs, &bitmaps, errp)) {
|
||||||
if (local_err) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
qapi_free_ImageInfoSpecific(spec_info);
|
qapi_free_ImageInfoSpecific(spec_info);
|
||||||
qapi_free_QCryptoBlockInfo(encrypt_info);
|
qapi_free_QCryptoBlockInfo(encrypt_info);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -979,8 +979,8 @@ int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
|
|||||||
void **refcount_table,
|
void **refcount_table,
|
||||||
int64_t *refcount_table_size);
|
int64_t *refcount_table_size);
|
||||||
bool qcow2_load_dirty_bitmaps(BlockDriverState *bs, Error **errp);
|
bool qcow2_load_dirty_bitmaps(BlockDriverState *bs, Error **errp);
|
||||||
Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(BlockDriverState *bs,
|
bool qcow2_get_bitmap_info_list(BlockDriverState *bs,
|
||||||
Error **errp);
|
Qcow2BitmapInfoList **info_list, Error **errp);
|
||||||
int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp);
|
int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp);
|
||||||
int qcow2_truncate_bitmaps_check(BlockDriverState *bs, Error **errp);
|
int qcow2_truncate_bitmaps_check(BlockDriverState *bs, Error **errp);
|
||||||
void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
|
void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
|
||||||
|
Loading…
Reference in New Issue
Block a user