From: Jason Dillaman Date: Thu, 4 Feb 2021 16:17:48 +0000 (-0500) Subject: librbd/io: conditionally disable move optimization X-Git-Tag: v15.2.13~2^2~15^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=22662d7b1d0af8a123b79e9060d692fa7c1fc2fb;p=ceph.git librbd/io: conditionally disable move optimization If the requested write length does not match the provided bufferlist length, disable the move optimization and instead fallback to creating a new sub-bufferlist for the object request. Fixes: https://tracker.ceph.com/issues/49173 Signed-off-by: Jason Dillaman (cherry picked from commit 8dbb4a3d971d9a48c171f161f531956dd0030403) --- diff --git a/src/librbd/io/ImageRequest.cc b/src/librbd/io/ImageRequest.cc index 977182eacd1c5..004c41c7dd899 100644 --- a/src/librbd/io/ImageRequest.cc +++ b/src/librbd/io/ImageRequest.cc @@ -553,7 +553,8 @@ ObjectDispatchSpec *ImageWriteRequest::create_object_request( I &image_ctx = this->m_image_ctx; bufferlist bl; - if (single_extent && object_extent.buffer_extents.size() == 1) { + if (single_extent && object_extent.buffer_extents.size() == 1 && + m_bl.length() == object_extent.length) { // optimization for single object/buffer extent writes bl = std::move(m_bl); } else {