diff --git a/src/osdc/Filer.h b/src/osdc/Filer.h index 237f618458c..bd09a8eaecd 100644 --- a/src/osdc/Filer.h +++ b/src/osdc/Filer.h @@ -143,7 +143,7 @@ class Filer { } } - void assemble_result(bufferlist& bl) { + void assemble_result(bufferlist& bl, bool zero_tail) { // go backwards, so that we can efficiently discard zeros map >::reverse_iterator p = partial.rbegin(); if (p == partial.rend()) @@ -157,7 +157,7 @@ class Filer { size_t len = p->second.first.length(); if (len < p->second.second) { - if (bl.length()) { + if (zero_tail || bl.length()) { bufferptr bp(p->second.second - p->second.first.length()); bp.zero(); bl.push_front(bp); diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index a1f40c62fcf..291013179a8 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -1875,7 +1875,7 @@ void Objecter::_sg_read_finish(vector& extents, vector r.add_partial_result(*bit, eit->buffer_extents); } bl->clear(); - r.assemble_result(*bl); + r.assemble_result(*bl, false); } else { ldout(cct, 15) << " only one frag" << dendl; bl->claim(resultbl[0]);