From: Somnath Roy Date: Fri, 27 Jun 2014 20:33:35 +0000 (-0700) Subject: PG: pass OpRequestRef by ref to avoid refcounting overhead X-Git-Tag: v0.84~121^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4689467a4a9e0eee9f4a6aa35b5ed53bb76e80e1;p=ceph.git PG: pass OpRequestRef by ref to avoid refcounting overhead Signed-off-by: Somnath Roy --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 58359622c1dc..a26c951ac145 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1651,7 +1651,7 @@ void PG::activate(ObjectStore::Transaction& t, } } -bool PG::op_has_sufficient_caps(OpRequestRef op) +bool PG::op_has_sufficient_caps(OpRequestRef& op) { // only check MOSDOp if (op->get_req()->get_type() != CEPH_MSG_OSD_OP) @@ -1705,7 +1705,7 @@ void PG::take_op_map_waiters() } } -void PG::queue_op(OpRequestRef op) +void PG::queue_op(OpRequestRef& op) { Mutex::Locker l(map_lock); if (!waiting_for_map.empty()) { @@ -4734,7 +4734,7 @@ ostream& operator<<(ostream& out, const PG& pg) return out; } -bool PG::can_discard_op(OpRequestRef op) +bool PG::can_discard_op(OpRequestRef& op) { MOSDOp *m = static_cast(op->get_req()); if (OSD::op_is_discardable(m)) { @@ -4784,7 +4784,7 @@ bool PG::can_discard_op(OpRequestRef op) } template -bool PG::can_discard_replica_op(OpRequestRef op) +bool PG::can_discard_replica_op(OpRequestRef& op) { T *m = static_cast(op->get_req()); assert(m->get_header().type == MSGTYPE); @@ -4835,7 +4835,7 @@ bool PG::can_discard_backfill(OpRequestRef op) } -bool PG::can_discard_request(OpRequestRef op) +bool PG::can_discard_request(OpRequestRef& op) { switch (op->get_req()->get_type()) { case CEPH_MSG_OSD_OP: diff --git a/src/osd/PG.h b/src/osd/PG.h index e67b7216d16b..0481a35ab8d6 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -207,7 +207,7 @@ protected: OSDMapRef last_persisted_osdmap_ref; PGPool pool; - void queue_op(OpRequestRef op); + void queue_op(OpRequestRef& op); void take_op_map_waiters(); void update_osdmap_ref(OSDMapRef newmap) { @@ -2049,13 +2049,13 @@ public: OSDMapRef osdmap); // OpRequest queueing - bool can_discard_op(OpRequestRef op); + bool can_discard_op(OpRequestRef& op); bool can_discard_scan(OpRequestRef op); bool can_discard_backfill(OpRequestRef op); - bool can_discard_request(OpRequestRef op); + bool can_discard_request(OpRequestRef& op); template - bool can_discard_replica_op(OpRequestRef op); + bool can_discard_replica_op(OpRequestRef& op); static bool op_must_wait_for_map(OSDMapRef curmap, OpRequestRef op); @@ -2070,7 +2070,7 @@ public: return e <= get_osdmap()->get_epoch(); } - bool op_has_sufficient_caps(OpRequestRef op); + bool op_has_sufficient_caps(OpRequestRef& op); // recovery bits @@ -2102,11 +2102,11 @@ public: // abstract bits virtual void do_request( - OpRequestRef op, + OpRequestRef& op, ThreadPool::TPHandle &handle ) = 0; - virtual void do_op(OpRequestRef op) = 0; + virtual void do_op(OpRequestRef& op) = 0; virtual void do_sub_op(OpRequestRef op) = 0; virtual void do_sub_op_reply(OpRequestRef op) = 0; virtual void do_scan( diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index bad48726029f..03e103a7f3a1 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1074,7 +1074,7 @@ void ReplicatedPG::get_src_oloc(const object_t& oid, const object_locator_t& olo } void ReplicatedPG::do_request( - OpRequestRef op, + OpRequestRef& op, ThreadPool::TPHandle &handle) { if (!op_has_sufficient_caps(op)) { @@ -1184,7 +1184,7 @@ bool ReplicatedPG::check_src_targ(const hobject_t& soid, const hobject_t& toid) * pg lock will be held (if multithreaded) * osd_lock NOT held. */ -void ReplicatedPG::do_op(OpRequestRef op) +void ReplicatedPG::do_op(OpRequestRef& op) { MOSDOp *m = static_cast(op->get_req()); assert(m->get_header().type == CEPH_MSG_OSD_OP); diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index b75e8539b9d5..4c73a35edac2 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -1270,9 +1270,9 @@ public: bufferlist& odata); void do_request( - OpRequestRef op, + OpRequestRef& op, ThreadPool::TPHandle &handle); - void do_op(OpRequestRef op); + void do_op(OpRequestRef& op); bool pg_op_must_wait(MOSDOp *op); void do_pg_op(OpRequestRef op); void do_sub_op(OpRequestRef op);