From: Vladimir Sementsov-Ogievskiy Date: Mon, 5 Aug 2019 12:01:20 +0000 (+0300) Subject: util/hbitmap: update orig_size on truncate X-Git-Tag: v4.0.1~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fc5c701636127a0b90cd7ab564da0354d06809dc;p=thirdparty%2Fqemu.git 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 Message-id: 20190805120120.23585-1-vsementsov@virtuozzo.com Reviewed-by: Max Reitz Cc: qemu-stable@nongnu.org Signed-off-by: Max Reitz (cherry picked from commit 4e4de222799634d8159ee7b9303b9e1b45c6be2c) Signed-off-by: Michael Roth --- diff --git a/util/hbitmap.c b/util/hbitmap.c index 7905212a8b9..bcc0acdc6a0 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));