[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 4/8] block: add bdrv_load_dirty_bitmap
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH 4/8] block: add bdrv_load_dirty_bitmap |
Date: |
Tue, 9 Jun 2015 17:01:22 +0100 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Mon, Jun 08, 2015 at 06:21:22PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> +BdrvDirtyBitmap *bdrv_load_dirty_bitmap(BlockDriverState *bs,
> + BlockDriverState *file,
> + int granularity,
> + const char *name,
> + Error **errp)
> +{
> + BlockDriver *drv = file->drv;
> + if (!drv) {
> + return NULL;
> + }
> + if (drv->bdrv_dirty_bitmap_load) {
> + BdrvDirtyBitmap *bitmap;
> + uint64_t bitmap_size = bdrv_nb_sectors(bs);
> + uint8_t *buf = drv->bdrv_dirty_bitmap_load(file, name, bitmap_size,
> + granularity);
> + if (buf == NULL) {
> + return NULL;
> + }
> +
> + bitmap = bdrv_create_dirty_bitmap(bs, granularity, name, errp);
> + if (bitmap == NULL) {
> + g_free(buf);
> + return NULL;
> + }
> +
> + hbitmap_deserialize_part(bitmap->bitmap, buf, 0, bitmap_size);
> + hbitmap_deserialize_finish(bitmap->bitmap);
How about passing bitmap and errp into drv->bdrv_dirty_bitmap_load?
That way bdrv_dirty_bitmap_load() can stream using
hbitmap_deserialize_part() and does not need to allocate the full
bitmap. It can also report errors properly.
pgpiffqjplwwl.pgp
Description: PGP signature