From: Sage Weil Date: Wed, 16 Nov 2016 16:19:40 +0000 (-0600) Subject: osd: make get_pg_or_queue_for_pg marginally more efficient X-Git-Tag: v11.1.0~194^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cbdc2b09a1104481ecd9815f8e6126eb4bf7626b;p=ceph.git 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 --- 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,