From: Mykola Golub Date: Tue, 19 Jun 2018 12:05:27 +0000 (+0300) Subject: librbd: deep_copy: update end_size only if zero interval caused truncate X-Git-Tag: v14.0.1~1073^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d1122573b8c6a69857004d042cc75e9581deebda;p=ceph.git librbd: deep_copy: update end_size only if zero interval caused truncate The problem shown up when stripping was used, and assembling a nonexistent destination object from source objects, and one of these objects existed and snap diff returned a zero interval. The non-zero end_size in that case triggered invalid object map update. Signed-off-by: Mykola Golub --- diff --git a/src/librbd/deep_copy/ObjectCopyRequest.cc b/src/librbd/deep_copy/ObjectCopyRequest.cc index 5fb70c7f37c8c..440cdbed035dc 100644 --- a/src/librbd/deep_copy/ObjectCopyRequest.cc +++ b/src/librbd/deep_copy/ObjectCopyRequest.cc @@ -887,7 +887,7 @@ void ObjectCopyRequest::compute_zero_ops() { ldout(m_cct, 20) << "COPY_OP_TYPE_TRUNC " << z.get_start() << dendl; } } - end_size = z.get_start(); + end_size = std::min(end_size, z.get_start()); } else { // zero interval inside the object m_write_ops[src_snap_seq]