]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: make get_pg_or_queue_for_pg marginally more efficient 12052/head
authorSage Weil <sage@redhat.com>
Wed, 16 Nov 2016 16:19:40 +0000 (10:19 -0600)
committerSage Weil <sage@redhat.com>
Wed, 16 Nov 2016 16:19:40 +0000 (10:19 -0600)
Avoid derefs to get the session, and avoid twiddling the ref count.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h

index 14839fb48092107000e4404b88f6bddbe8623f61..b983ad73fc310be3a2ea527e45b72c3556d91362 100644 (file)
@@ -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<Session*>(
-    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;
index 6c67ba629dcfa4ca2746b25586b5422a2ca75923..4f979bcdbd1016922e30a05abad74ffa572b7c9a 100644 (file)
@@ -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,