]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: sparse_read offset may not be zero for ecpool 9364/head
authorkofiliu <liu.xuan@h3c.com>
Fri, 27 May 2016 07:45:06 +0000 (03:45 -0400)
committerkofiliu <liu.xuan@h3c.com>
Fri, 27 May 2016 07:52:19 +0000 (03:52 -0400)
Signed-off-by: kofiliu <liu.xuan@h3c.com>
src/osd/ReplicatedPG.cc

index 8b3da574699337fe532d3cb394e7d8ea647ba2b4..b931ca2fb4cc01ed98a243cf25cb2b7a5a765d23 100644 (file)
@@ -4047,14 +4047,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);
@@ -4318,7 +4319,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 {