[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/8] block: add bdrv_load_dirty_bitmap
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-devel] [PATCH 5/8] block: add bdrv_load_dirty_bitmap |
Date: |
Tue, 13 Jan 2015 20:02:22 +0300 |
The funcion loads dirty bitmap from file, using underlying driver
function.
Note: the function doesn't change BdrvDirtyBitmap.file field. This field
is only used by bdrv_store_dirty_bitmap() function and is ONLY written
by bdrv_dirty_bitmap_set_file() function.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block.c | 37 +++++++++++++++++++++++++++++++++++++
include/block/block.h | 5 +++++
2 files changed, 42 insertions(+)
diff --git a/block.c b/block.c
index 7237b95..77419e9 100644
--- a/block.c
+++ b/block.c
@@ -5384,6 +5384,43 @@ BdrvDirtyBitmap
*bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
return originator;
}
+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_restore_data(bitmap->bitmap, buf, 0, bitmap_size);
+ hbitmap_restore_finish(bitmap->bitmap);
+
+ return bitmap;
+ }
+ if (file->file) {
+ return bdrv_load_dirty_bitmap(bs, file->file, granularity, name,
+ errp);
+ }
+ return NULL;
+}
+
int bdrv_store_dirty_bitmap(BdrvDirtyBitmap *bitmap)
{
BlockDriverState *bs = bitmap->file;
diff --git a/include/block/block.h b/include/block/block.h
index 0dfefe3..f36557f 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -460,6 +460,11 @@ void bdrv_dirty_iter_init(BlockDriverState *bs,
BdrvDirtyBitmap *bitmap, struct HBitmapIter *hbi);
void bdrv_set_dirty_iter(struct HBitmapIter *hbi, int64_t offset);
int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
+BdrvDirtyBitmap *bdrv_load_dirty_bitmap(BlockDriverState *bs,
+ BlockDriverState *file,
+ int granularity,
+ const char *name,
+ Error **errp);
int bdrv_store_dirty_bitmap(BdrvDirtyBitmap *bitmap);
void bdrv_enable_copy_on_read(BlockDriverState *bs);
--
1.9.1
- [Qemu-devel] [PATCH 0/8] block: persistent dirty bitmaps (RFC), Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 2/8] hbitmap: store / restore, Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 1/8] spec: add qcow2-dirty-bitmaps specification, Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 4/8] block: store persistent dirty bitmaps, Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 3/8] qcow2: add dirty-bitmaps feature, Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 5/8] block: add bdrv_load_dirty_bitmap,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-devel] [PATCH 6/8] qemu: command line option for dirty bitmaps, Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 7/8] qmp: print dirty bitmap, Vladimir Sementsov-Ogievskiy, 2015/01/13
- [Qemu-devel] [PATCH 8/8] iotests: test internal persistent dirty bitmap, Vladimir Sementsov-Ogievskiy, 2015/01/13
- Re: [Qemu-devel] [PATCH 0/8] block: persistent dirty bitmaps (RFC), Vladimir Sementsov-Ogievskiy, 2015/01/27