mirror of https://gitee.com/openkylin/qemu.git
block/qcow2-bitmap: return status from qcow2_store_persistent_dirty_bitmaps
It's better to return status together with setting errp. It makes possible to avoid error propagation. While being here, put ERRP_GUARD() to fix error_prepend(errp, ...) usage inside qcow2_store_persistent_dirty_bitmaps() (see the comment above ERRP_GUARD() definition in include/qapi/error.h) Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Greg Kurz <groug@kaod.org> Reviewed-by: Alberto Garcia <berto@igalia.com> Message-Id: <20210202124956.63146-11-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
0c1e9d2a9a
commit
526e31de99
|
@ -1531,9 +1531,10 @@ out:
|
||||||
* readonly to begin with, and whether we opened directly or reopened to that
|
* readonly to begin with, and whether we opened directly or reopened to that
|
||||||
* state shouldn't matter for the state we get afterward.
|
* state shouldn't matter for the state we get afterward.
|
||||||
*/
|
*/
|
||||||
void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
|
bool qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
|
||||||
bool release_stored, Error **errp)
|
bool release_stored, Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
BdrvDirtyBitmap *bitmap;
|
BdrvDirtyBitmap *bitmap;
|
||||||
BDRVQcow2State *s = bs->opaque;
|
BDRVQcow2State *s = bs->opaque;
|
||||||
uint32_t new_nb_bitmaps = s->nb_bitmaps;
|
uint32_t new_nb_bitmaps = s->nb_bitmaps;
|
||||||
|
@ -1553,7 +1554,7 @@ void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
|
||||||
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 == NULL) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1668,7 +1669,7 @@ success:
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmap_list_free(bm_list);
|
bitmap_list_free(bm_list);
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
QSIMPLEQ_FOREACH(bm, bm_list, entry) {
|
QSIMPLEQ_FOREACH(bm, bm_list, entry) {
|
||||||
|
@ -1686,16 +1687,14 @@ fail:
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmap_list_free(bm_list);
|
bitmap_list_free(bm_list);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp)
|
int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp)
|
||||||
{
|
{
|
||||||
BdrvDirtyBitmap *bitmap;
|
BdrvDirtyBitmap *bitmap;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
qcow2_store_persistent_dirty_bitmaps(bs, false, &local_err);
|
if (!qcow2_store_persistent_dirty_bitmaps(bs, false, errp)) {
|
||||||
if (local_err != NULL) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -984,7 +984,7 @@ bool qcow2_get_bitmap_info_list(BlockDriverState *bs,
|
||||||
Qcow2BitmapInfoList **info_list, 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,
|
bool qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
|
||||||
bool release_stored, Error **errp);
|
bool release_stored, Error **errp);
|
||||||
int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp);
|
int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp);
|
||||||
bool qcow2_co_can_store_new_dirty_bitmap(BlockDriverState *bs,
|
bool qcow2_co_can_store_new_dirty_bitmap(BlockDriverState *bs,
|
||||||
|
|
Loading…
Reference in New Issue