From: Sunny Kumar Date: Wed, 2 Jun 2021 15:14:45 +0000 (+0100) Subject: librbd/object_map: rbd diff between two snapshots lists entire image content X-Git-Tag: v16.2.7~27^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2d2f4a74392c567a00dbd14b286427263136dd5;p=ceph.git librbd/object_map: rbd diff between two snapshots lists entire image content 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 (cherry picked from commit 399a45e113322f3b2f8be9af83044c3aee8d96b9) --- diff --git a/src/librbd/object_map/DiffRequest.cc b/src/librbd/object_map/DiffRequest.cc index a8331bc5afc..566e98ac0f0 100644 --- a/src/librbd/object_map/DiffRequest.cc +++ b/src/librbd/object_map/DiffRequest.cc @@ -222,7 +222,9 @@ void DiffRequest::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;