diff options
author | Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> | 2019-08-05 15:01:20 +0300 |
---|---|---|
committer | Max Reitz <mreitz@redhat.com> | 2019-08-06 13:17:20 +0200 |
commit | 4e4de222799634d8159ee7b9303b9e1b45c6be2c (patch) | |
tree | 462b96cf2cf511b9f887d3690bcac976a83d9366 | |
parent | 5f594a2e99f19ca0f7744d333bcd556f5976b78f (diff) | |
download | qemu-4e4de222799634d8159ee7b9303b9e1b45c6be2c.zip qemu-4e4de222799634d8159ee7b9303b9e1b45c6be2c.tar.gz qemu-4e4de222799634d8159ee7b9303b9e1b45c6be2c.tar.bz2 |
util/hbitmap: update orig_size on truncate
Without this, hbitmap_next_zero and hbitmap_next_dirty_area are broken
after truncate. So, orig_size is broken since it's introduction in
76d570dc495c56bb.
Fixes: 76d570dc495c56bb
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-id: 20190805120120.23585-1-vsementsov@virtuozzo.com
Reviewed-by: Max Reitz <mreitz@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Max Reitz <mreitz@redhat.com>
-rw-r--r-- | util/hbitmap.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/util/hbitmap.c b/util/hbitmap.c index 7905212..bcc0acd 100644 --- a/util/hbitmap.c +++ b/util/hbitmap.c @@ -53,7 +53,9 @@ */ struct HBitmap { - /* Size of the bitmap, as requested in hbitmap_alloc. */ + /* + * Size of the bitmap, as requested in hbitmap_alloc or in hbitmap_truncate. + */ uint64_t orig_size; /* Number of total bits in the bottom level. */ @@ -732,6 +734,8 @@ void hbitmap_truncate(HBitmap *hb, uint64_t size) uint64_t num_elements = size; uint64_t old; + hb->orig_size = size; + /* Size comes in as logical elements, adjust for granularity. */ size = (size + (1ULL << hb->granularity) - 1) >> hb->granularity; assert(size <= ((uint64_t)1 << HBITMAP_LOG_MAX_SIZE)); |