]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: Avoid copy data from librados to caller buff 3203/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Thu, 18 Dec 2014 08:51:51 +0000 (16:51 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Thu, 18 Dec 2014 14:09:42 +0000 (22:09 +0800)
when using rados_read_op_read.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osdc/Objecter.cc
src/osdc/Objecter.h

index 152560c5aa8449e5adbc55d0200655bf4b61abb3..516d315e590e98718c0b12a450f8daf783befef0 100644 (file)
@@ -2953,6 +2953,14 @@ void Objecter::handle_osd_op_reply(MOSDOpReply *m)
   if (op->reply_epoch)
     *op->reply_epoch = m->get_map_epoch();
 
+  // got data?
+  if (op->outbl) {
+    if (op->con)
+      op->con->revoke_rx_buffer(op->tid);
+    m->claim_data(*op->outbl);
+    op->outbl = 0;
+  }
+
   // per-op result demuxing
   vector<OSDOp> out_ops;
   m->claim_ops(out_ops);
@@ -3003,14 +3011,6 @@ void Objecter::handle_osd_op_reply(MOSDOpReply *m)
     logger->inc(l_osdc_op_commit);
   }
 
-  // got data?
-  if (op->outbl) {
-    if (op->con)
-      op->con->revoke_rx_buffer(op->tid);
-    m->claim_data(*op->outbl);
-    op->outbl = 0;
-  }
-
   /* get it before we call _finish_op() */
   Mutex *completion_lock = (op->target.base_oid.name.size() ? s->get_lock(op->target.base_oid) : NULL);
 
index d17b1ed92b94801890829bece5bfe74f883855f6..735b14b07d8c2a2cf54e5cb48358e673c940ac61 100644 (file)
@@ -1980,6 +1980,8 @@ public:
     o->priority = op.priority;
     o->snapid = snapid;
     o->outbl = pbl;
+    if (!o->outbl && op.size() == 1 && op.out_bl[0]->length())
+       o->outbl = op.out_bl[0];
     o->out_bl.swap(op.out_bl);
     o->out_handler.swap(op.out_handler);
     o->out_rval.swap(op.out_rval);