From cbdc2b09a1104481ecd9815f8e6126eb4bf7626b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 16 Nov 2016 10:19:40 -0600 Subject: [PATCH] osd: make get_pg_or_queue_for_pg marginally more efficient Avoid derefs to get the session, and avoid twiddling the ref count. Signed-off-by: Sage Weil --- src/osd/OSD.cc | 13 ++++++------- src/osd/OSD.h | 3 ++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 14839fb48092..b983ad73fc31 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3211,12 +3211,12 @@ PG *OSD::_create_lock_pg( return pg; } -PGRef OSD::get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op) +PGRef OSD::get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op, + Session *session) { - Session *session = static_cast( - op->get_req()->get_connection()->get_priv()); - if (!session) + if (!session) { return PGRef(); + } // get_pg_or_queue_for_pg is only called from the fast_dispatch path where // the session_dispatch_lock must already be held. assert(session->session_dispatch_lock.is_locked()); @@ -3236,7 +3236,6 @@ PGRef OSD::get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op) wlistiter->second.push_back(op); register_session_waiting_on_pg(session, pgid); } - session->put(); return PGRef(out); } @@ -8680,7 +8679,7 @@ void OSD::handle_op(OpRequestRef& op, OSDMapRef& osdmap) return; } - PGRef pg = get_pg_or_queue_for_pg(pgid, op); + PGRef pg = get_pg_or_queue_for_pg(pgid, op, client_session); if (pg) { op->send_map_update = share_map.should_send; op->sent_epoch = m->get_map_epoch(); @@ -8772,7 +8771,7 @@ void OSD::handle_replica_op(OpRequestRef& op, OSDMapRef& osdmap) peer_session->put(); } - PGRef pg = get_pg_or_queue_for_pg(m->pgid, op); + PGRef pg = get_pg_or_queue_for_pg(m->pgid, op, peer_session); if (pg) { op->send_map_update = should_share_map; op->sent_epoch = m->map_epoch; diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 6c67ba629dcf..4f979bcdbd10 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -2041,7 +2041,8 @@ protected: PGPool _get_pool(int id, OSDMapRef createmap); - PGRef get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op); + PGRef get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op, + Session *session); PG *_lookup_lock_pg_with_map_lock_held(spg_t pgid); PG *_lookup_lock_pg(spg_t pgid); PG *_open_lock_pg(OSDMapRef createmap, -- 2.47.3