Commit b56a1e31 authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by John Snow
Browse files

block/dirty-bitmap: return int from bdrv_remove_persistent_dirty_bitmap



It's more comfortable to not deal with local_err.

Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
Message-id: 20190920082543.23444-3-vsementsov@virtuozzo.com
Signed-off-by: default avatarJohn Snow <jsnow@redhat.com>
parent 85cc8a4f
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -455,13 +455,14 @@ void bdrv_release_named_dirty_bitmaps(BlockDriverState *bs)
 * not fail.
 * This function doesn't release corresponding BdrvDirtyBitmap.
 */
void bdrv_remove_persistent_dirty_bitmap(BlockDriverState *bs,
                                         const char *name,
int bdrv_remove_persistent_dirty_bitmap(BlockDriverState *bs, const char *name,
                                        Error **errp)
{
    if (bs->drv && bs->drv->bdrv_remove_persistent_dirty_bitmap) {
        bs->drv->bdrv_remove_persistent_dirty_bitmap(bs, name, errp);
        return bs->drv->bdrv_remove_persistent_dirty_bitmap(bs, name, errp);
    }

    return 0;
}

bool bdrv_can_store_new_dirty_bitmap(BlockDriverState *bs, const char *name,
+10 −8
Original line number Diff line number Diff line
@@ -1404,8 +1404,7 @@ static Qcow2Bitmap *find_bitmap_by_name(Qcow2BitmapList *bm_list,
    return NULL;
}

void qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs,
                                          const char *name,
int qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs, const char *name,
                                         Error **errp)
{
    int ret;
@@ -1416,18 +1415,19 @@ void qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs,
    if (s->nb_bitmaps == 0) {
        /* Absence of the bitmap is not an error: see explanation above
         * bdrv_remove_persistent_dirty_bitmap() definition. */
        return;
        return 0;
    }

    bm_list = bitmap_list_load(bs, s->bitmap_directory_offset,
                               s->bitmap_directory_size, errp);
    if (bm_list == NULL) {
        return;
        return -EIO;
    }

    bm = find_bitmap_by_name(bm_list, name);
    if (bm == NULL) {
        goto fail;
        ret = -EINVAL;
        goto out;
    }

    QSIMPLEQ_REMOVE(bm_list, bm, Qcow2Bitmap, entry);
@@ -1435,14 +1435,16 @@ void qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs,
    ret = update_ext_header_and_dir(bs, bm_list);
    if (ret < 0) {
        error_setg_errno(errp, -ret, "Failed to update bitmap extension");
        goto fail;
        goto out;
    }

    free_bitmap_clusters(bs, &bm->table);

fail:
out:
    bitmap_free(bm);
    bitmap_list_free(bm_list);

    return ret;
}

void qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs, Error **errp)
+2 −3
Original line number Diff line number Diff line
@@ -750,8 +750,7 @@ bool qcow2_can_store_new_dirty_bitmap(BlockDriverState *bs,
                                      const char *name,
                                      uint32_t granularity,
                                      Error **errp);
void qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs,
                                          const char *name,
int qcow2_remove_persistent_dirty_bitmap(BlockDriverState *bs, const char *name,
                                         Error **errp);

ssize_t coroutine_fn
+3 −4
Original line number Diff line number Diff line
@@ -2940,15 +2940,14 @@ static BdrvDirtyBitmap *do_block_dirty_bitmap_remove(
    }

    if (bdrv_dirty_bitmap_get_persistence(bitmap)) {
        int ret;
        AioContext *aio_context = bdrv_get_aio_context(bs);
        Error *local_err = NULL;

        aio_context_acquire(aio_context);
        bdrv_remove_persistent_dirty_bitmap(bs, name, &local_err);
        ret = bdrv_remove_persistent_dirty_bitmap(bs, name, errp);
        aio_context_release(aio_context);

        if (local_err != NULL) {
            error_propagate(errp, local_err);
        if (ret < 0) {
            return NULL;
        }
    }
+3 −3
Original line number Diff line number Diff line
@@ -557,7 +557,7 @@ struct BlockDriver {
                                            const char *name,
                                            uint32_t granularity,
                                            Error **errp);
    void (*bdrv_remove_persistent_dirty_bitmap)(BlockDriverState *bs,
    int (*bdrv_remove_persistent_dirty_bitmap)(BlockDriverState *bs,
                                               const char *name,
                                               Error **errp);

Loading