Blame SOURCES/kvm-bitmap-Update-count-after-a-merge.patch

7711c0
From 56152f8d7cb931e6172a9e44bec7fe274716a240 Mon Sep 17 00:00:00 2001
7711c0
From: John Snow <jsnow@redhat.com>
7711c0
Date: Wed, 6 Feb 2019 22:12:37 +0100
7711c0
Subject: [PATCH 27/33] bitmap: Update count after a merge
7711c0
7711c0
RH-Author: John Snow <jsnow@redhat.com>
7711c0
Message-id: <20190206221243.7407-18-jsnow@redhat.com>
7711c0
Patchwork-id: 84282
7711c0
O-Subject: [RHEL-7.7 qemu-kvm-rhev PATCH v2 17/23] bitmap: Update count after a merge
7711c0
Bugzilla: 1658343
7711c0
RH-Acked-by: Thomas Huth <thuth@redhat.com>
7711c0
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
7711c0
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
7711c0
7711c0
From: Eric Blake <eblake@redhat.com>
7711c0
7711c0
We need an accurate count of the number of bits set in a bitmap
7711c0
after a merge. In particular, since the merge operation short-circuits
7711c0
a merge from an empty source, if you have bitmaps A, B, and C where
7711c0
B started empty, then merge C into B, and B into A, an inaccurate
7711c0
count meant that A did not get the contents of C.
7711c0
7711c0
In the worst case, we may falsely regard the bitmap as empty when
7711c0
it has had new writes merged into it.
7711c0
7711c0
Fixes: be58721db
7711c0
CC: qemu-stable@nongnu.org
7711c0
Signed-off-by: Eric Blake <eblake@redhat.com>
7711c0
Signed-off-by: John Snow <jsnow@redhat.com>
7711c0
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
7711c0
Message-id: 20181002233314.30159-1-jsnow@redhat.com
7711c0
Signed-off-by: John Snow <jsnow@redhat.com>
7711c0
(cherry picked from commit d1dde7149e376d72b422a529ec4bf3ed47f3ba30)
7711c0
Signed-off-by: John Snow <jsnow@redhat.com>
7711c0
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
---
7711c0
 util/hbitmap.c | 3 +++
7711c0
 1 file changed, 3 insertions(+)
7711c0
7711c0
diff --git a/util/hbitmap.c b/util/hbitmap.c
7711c0
index d5aca51..8d402c5 100644
7711c0
--- a/util/hbitmap.c
7711c0
+++ b/util/hbitmap.c
7711c0
@@ -759,6 +759,9 @@ bool hbitmap_merge(const HBitmap *a, const HBitmap *b, HBitmap *result)
7711c0
         }
7711c0
     }
7711c0
 
7711c0
+    /* Recompute the dirty count */
7711c0
+    result->count = hb_count_between(result, 0, result->size - 1);
7711c0
+
7711c0
     return true;
7711c0
 }
7711c0
 
7711c0
-- 
7711c0
1.8.3.1
7711c0