From: Sage Weil Date: Sun, 7 Dec 2014 01:42:51 +0000 (-0800) Subject: osd/ReplicatedPG: put proxy read completion on finisher X-Git-Tag: v0.92~33^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1c8b679d0cda4fa73fac426a3dd57021ab14b7b4;p=ceph.git osd/ReplicatedPG: put proxy read completion on finisher We can't use the synchronous completion callbacks (in fast dispatch context) do to the proxy read completion work. Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 0a31c770c65b..6872a2370c1f 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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;