From: kofiliu Date: Fri, 27 May 2016 07:45:06 +0000 (-0400) Subject: osd: sparse_read offset may not be zero for ecpool X-Git-Tag: v10.2.3~106^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a2e8ae68ea452d03519359cb0cd344e71e603fa9;p=ceph.git osd: sparse_read offset may not be zero for ecpool Signed-off-by: kofiliu (cherry picked from commit 65e8738611cde0090619b3566a2e25f83b4c8468) --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index fd139be9a767..c64e315f7fb1 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4034,14 +4034,15 @@ struct FillInVerifyExtent : public Context { struct ToSparseReadResult : public Context { bufferlist& data_bl; + uint64_t data_offset; ceph_le64& len; - ToSparseReadResult(bufferlist& bl, ceph_le64& len): - data_bl(bl), len(len) {} + ToSparseReadResult(bufferlist& bl, uint64_t offset, ceph_le64& len): + data_bl(bl), data_offset(offset),len(len) {} void finish(int r) { if (r < 0) return; len = r; bufferlist outdata; - map extents = {{0, r}}; + map extents = {{data_offset, r}}; ::encode(extents, outdata); ::encode_destructively(data_bl, outdata); data_bl.swap(outdata); @@ -4305,7 +4306,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) ctx->pending_async_reads.push_back( make_pair( boost::make_tuple(op.extent.offset, op.extent.length, op.flags), - make_pair(&osd_op.outdata, new ToSparseReadResult(osd_op.outdata, + make_pair(&osd_op.outdata, new ToSparseReadResult(osd_op.outdata, op.extent.offset, op.extent.length)))); dout(10) << " async_read (was sparse_read) noted for " << soid << dendl; } else {