49 lines
1.6 KiB
Diff
49 lines
1.6 KiB
Diff
From fc5c701636127a0b90cd7ab564da0354d06809dc Mon Sep 17 00:00:00 2001
|
|
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
|
Date: Mon, 5 Aug 2019 15:01:20 +0300
|
|
Subject: [PATCH] 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>
|
|
(cherry picked from commit 4e4de222799634d8159ee7b9303b9e1b45c6be2c)
|
|
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
|
|
---
|
|
util/hbitmap.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/util/hbitmap.c b/util/hbitmap.c
|
|
index 7905212a8b..bcc0acdc6a 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));
|
|
--
|
|
2.19.1
|
|
|