]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: put proxy read completion on finisher
authorSage Weil <sage@redhat.com>
Sun, 7 Dec 2014 01:42:51 +0000 (17:42 -0800)
committerSage Weil <sage@redhat.com>
Sun, 11 Jan 2015 04:35:30 +0000 (20:35 -0800)
We can't use the synchronous completion callbacks (in fast dispatch
context) do to the proxy read completion work.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/ReplicatedPG.cc

index 0a31c770c65b9966893d5abe396be75c4a06cacd..6872a2370c1f1d8ef68add5bc22ede91b23e361d 100644 (file)
@@ -1971,11 +1971,14 @@ void ReplicatedPG::do_proxy_read(OpRequestRef op)
   ObjectOperation obj_op;
   obj_op.dup(prdop->ops);
 
-  C_ProxyRead *fin = new C_ProxyRead(this, soid, get_last_peering_reset(), prdop);
-  ceph_tid_t tid = osd->objecter->read(soid.oid, oloc, obj_op,
-                                 m->get_snapid(), NULL,
-                                 flags, fin,
-                                 &prdop->user_version, &prdop->data_offset);
+  C_ProxyRead *fin = new C_ProxyRead(this, soid, get_last_peering_reset(),
+                                    prdop);
+  ceph_tid_t tid = osd->objecter->read(
+    soid.oid, oloc, obj_op,
+    m->get_snapid(), NULL,
+    flags, new C_OnFinisher(fin, &osd->objecter_finisher),
+    &prdop->user_version,
+    &prdop->data_offset);
   fin->tid = tid;
   prdop->objecter_tid = tid;
   proxyread_ops[tid] = prdop;