[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 10/10] block/qcow2-bitmap: use bdrv_dirty_bitmap_next_dirty
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v3 10/10] block/qcow2-bitmap: use bdrv_dirty_bitmap_next_dirty |
Date: |
Thu, 19 Dec 2019 13:03:48 +0300 |
store_bitmap_data() loop does bdrv_set_dirty_iter() on each iteration,
which means that we actually don't need iterator itself and we can use
simpler bitmap API.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block/qcow2-bitmap.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
index c6c8ebbe89..015f5d18d2 100644
--- a/block/qcow2-bitmap.c
+++ b/block/qcow2-bitmap.c
@@ -1289,7 +1289,6 @@ static uint64_t *store_bitmap_data(BlockDriverState *bs,
uint64_t bm_size = bdrv_dirty_bitmap_size(bitmap);
const char *bm_name = bdrv_dirty_bitmap_name(bitmap);
uint8_t *buf = NULL;
- BdrvDirtyBitmapIter *dbi;
uint64_t *tb;
uint64_t tb_size =
size_to_clusters(s,
@@ -1308,12 +1307,14 @@ static uint64_t *store_bitmap_data(BlockDriverState *bs,
return NULL;
}
- dbi = bdrv_dirty_iter_new(bitmap);
buf = g_malloc(s->cluster_size);
limit = bytes_covered_by_bitmap_cluster(s, bitmap);
assert(DIV_ROUND_UP(bm_size, limit) == tb_size);
- while ((offset = bdrv_dirty_iter_next(dbi)) >= 0) {
+ offset = 0;
+ while ((offset = bdrv_dirty_bitmap_next_dirty(bitmap, offset, INT64_MAX))
+ >= 0)
+ {
uint64_t cluster = offset / limit;
uint64_t end, write_size;
int64_t off;
@@ -1360,19 +1361,17 @@ static uint64_t *store_bitmap_data(BlockDriverState *bs,
break;
}
- bdrv_set_dirty_iter(dbi, end);
+ offset = end;
}
*bitmap_table_size = tb_size;
g_free(buf);
- bdrv_dirty_iter_free(dbi);
return tb;
fail:
clear_bitmap_table(bs, tb, tb_size);
g_free(buf);
- bdrv_dirty_iter_free(dbi);
g_free(tb);
return NULL;
--
2.21.0
- [PATCH v3 00/10] Further bitmaps improvements, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 03/10] hbitmap: unpublish hbitmap_iter_skip_words, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 02/10] hbitmap: move hbitmap_iter_next_word to hbitmap.c, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 09/10] nbd/server: use bdrv_dirty_bitmap_next_dirty_area, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 01/10] hbitmap: assert that we don't create bitmap larger than INT64_MAX, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 07/10] block/dirty-bitmap: improve _next_dirty_area API, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 10/10] block/qcow2-bitmap: use bdrv_dirty_bitmap_next_dirty,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v3 05/10] block/dirty-bitmap: switch _next_dirty_area and _next_zero to int64_t, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 04/10] hbitmap: drop meta bitmaps as they are unused, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 08/10] nbd/server: introduce NBDExtentArray, Vladimir Sementsov-Ogievskiy, 2019/12/19
- [PATCH v3 06/10] block/dirty-bitmap: add _next_dirty API, Vladimir Sementsov-Ogievskiy, 2019/12/19