]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd/io: conditionally disable move optimization
authorJason Dillaman <dillaman@redhat.com>
Thu, 4 Feb 2021 16:17:48 +0000 (11:17 -0500)
committerJason Dillaman <dillaman@redhat.com>
Fri, 12 Feb 2021 13:23:34 +0000 (08:23 -0500)
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 <dillaman@redhat.com>
(cherry picked from commit 8dbb4a3d971d9a48c171f161f531956dd0030403)

src/librbd/io/ImageRequest.cc

index 2b4212df9decffd6eac69279a5ad6ddd467835fd..5f8d2f0da39bf750c61febc46c56338762aa869a 100644 (file)
@@ -527,7 +527,8 @@ ObjectDispatchSpec *ImageWriteRequest<I>::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 {