From d1122573b8c6a69857004d042cc75e9581deebda Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 19 Jun 2018 15:05:27 +0300 Subject: [PATCH] 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 --- src/librbd/deep_copy/ObjectCopyRequest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librbd/deep_copy/ObjectCopyRequest.cc b/src/librbd/deep_copy/ObjectCopyRequest.cc index 5fb70c7f37c8..440cdbed035d 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] -- 2.47.3