]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/object_map: rbd diff between two snapshots lists entire image content
authorSunny Kumar <sunkumar@redhat.com>
Wed, 2 Jun 2021 15:14:45 +0000 (16:14 +0100)
committerSunny Kumar <sunkumar@redhat.com>
Wed, 16 Jun 2021 09:13:17 +0000 (10:13 +0100)
Problem:
rbd diff between two snapshots lists entire image content with `whole-object` switch.

Solution:
While computing resize diff during object map do not mark state as new data
unless diff state is valid.

Fixes: https://tracker.ceph.com/issues/50787
Signed-off-by: Sunny Kumar <sunkumar@redhat.com>
src/librbd/object_map/DiffRequest.cc

index ca341f78c2f28b151731c6699df8f4ecc309ef79..606d48bbf33c4d6eb9343a5b1735af47ee21cc8c 100644 (file)
@@ -222,7 +222,9 @@ void DiffRequest<I>::handle_load_object_map(int r) {
       uint8_t object_map_state = *it;
       if (object_map_state == OBJECT_NONEXISTENT) {
         *diff_it = DIFF_STATE_HOLE;
-      } else if (diff_from_start || object_map_state != OBJECT_EXISTS_CLEAN) {
+      } else if (diff_from_start ||
+                 (m_object_diff_state_valid &&
+                  object_map_state != OBJECT_EXISTS_CLEAN)) {
         *diff_it = DIFF_STATE_DATA_UPDATED;
       } else {
         *diff_it = DIFF_STATE_DATA;