From 1c8b679d0cda4fa73fac426a3dd57021ab14b7b4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 6 Dec 2014 17:42:51 -0800 Subject: [PATCH] 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 --- src/osd/ReplicatedPG.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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; -- 2.47.3