]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: sparse_read offset may not be zero for ecpool 10006/head
authorkofiliu <liu.xuan@h3c.com>
Fri, 27 May 2016 07:45:06 +0000 (03:45 -0400)
committerLoic Dachary <ldachary@redhat.com>
Wed, 29 Jun 2016 08:44:57 +0000 (10:44 +0200)
Signed-off-by: kofiliu <liu.xuan@h3c.com>
(cherry picked from commit 65e8738611cde0090619b3566a2e25f83b4c8468)

src/osd/ReplicatedPG.cc

index fd139be9a767914840b785bedab5528ead0f41e6..c64e315f7fb1742281fb530d78284c839771b6db 100644 (file)
@@ -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<uint64_t, uint64_t> extents = {{0, r}};
+    map<uint64_t, uint64_t> 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<OSDOp>& 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 {