]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: object write should not exceed part size
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 24 Jul 2014 22:30:27 +0000 (15:30 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Sat, 2 Aug 2014 20:18:25 +0000 (13:18 -0700)
Fixes: #8928
This can happen if the stripe size is not a multiple of the chunk size.

Backport: firefly

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
(cherry picked from commit 14cad5ece7d1de9d93e72acca6d4c3b4a9cfcfa2)

src/rgw/rgw_rados.cc

index 2914047f62680d8199d8df16005a30c3b92c931d..5a62e738caec19f71ffbfe22ea394d34381309ee 100644 (file)
@@ -1044,11 +1044,13 @@ int RGWPutObjProcessor_Atomic::handle_data(bufferlist& bl, off_t ofs, void **pha
     }
   }
 
+  uint64_t max_write_size = MIN(max_chunk_size, (uint64_t)next_part_ofs - data_ofs);
+
   pending_data_bl.claim_append(bl);
-  if (pending_data_bl.length() < max_chunk_size)
+  if (pending_data_bl.length() < max_write_size)
     return 0;
 
-  pending_data_bl.splice(0, max_chunk_size, &bl);
+  pending_data_bl.splice(0, max_write_size, &bl);
 
   if (!data_ofs && !immutable_head()) {
     first_chunk.claim(bl);