]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fast diff should treat all _EXISTS objects as dirty 4603/head
authorJason Dillaman <dillaman@redhat.com>
Thu, 7 May 2015 01:28:25 +0000 (21:28 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 7 May 2015 01:28:25 +0000 (21:28 -0400)
With the fast-diff feature enabled, if the object map marks the
object as _EXISTS, it can only occur due to a write -- otherwise
it would be _EXISTS_CLEAN.  Therefore, ensure it is properly
flagged as an updated object for diff_iterate.

Fixes: #11553
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/internal.cc

index c3f49b4df1ab1a27f847c8f5e9c70ae3d519e43c..94dbb73ff1baed14ee388808854f0421aa13625a 100644 (file)
@@ -139,9 +139,10 @@ int diff_object_map(ImageCtx* ictx, uint64_t from_snap_id, uint64_t to_snap_id,
         if (prev_object_map[i] != OBJECT_NONEXISTENT) {
           (*object_diff_state)[i] = OBJECT_DIFF_STATE_HOLE;
         }
-      } else if (prev_object_map[i] != object_map[i] &&
-                 !(prev_object_map[i] == OBJECT_EXISTS &&
-                   object_map[i] == OBJECT_EXISTS_CLEAN)) {
+      } else if (object_map[i] == OBJECT_EXISTS ||
+                 (prev_object_map[i] != object_map[i] &&
+                  !(prev_object_map[i] == OBJECT_EXISTS &&
+                    object_map[i] == OBJECT_EXISTS_CLEAN))) {
         (*object_diff_state)[i] = OBJECT_DIFF_STATE_UPDATED;
       }
     }