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());
wlistiter->second.push_back(op);
register_session_waiting_on_pg(session, pgid);
}
- session->put();
return PGRef(out);
}
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();
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;
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,