From: Samuel Just Date: Fri, 11 Jul 2014 21:42:48 +0000 (-0700) Subject: Merge pull request #2071 from somnathr/wip-sd-cpu-optimized X-Git-Tag: v0.84~121 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e1fc96f713eeb1fbbef4d2286b367f40d4f374a9;p=ceph.git Merge pull request #2071 from somnathr/wip-sd-cpu-optimized Wip sd cpu optimized Reviewed-by: Samuel Just --- e1fc96f713eeb1fbbef4d2286b367f40d4f374a9 diff --cc src/osd/OSD.cc index 0a3ecc33234c,985ce5d0a3a4..8d3813e956f4 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@@ -2053,22 -2032,28 +2053,22 @@@ PG *OSD::_create_lock_pg return pg; } - PG *OSD::get_pg_or_queue_for_pg(spg_t pgid, OpRequestRef op) + PG *OSD::get_pg_or_queue_for_pg(const spg_t& pgid, OpRequestRef& op) { - RWLock::RLocker l(pg_map_lock); - Session *session = static_cast( - op->get_req()->get_connection()->get_priv()); - + { + RWLock::RLocker l(pg_map_lock); + ceph::unordered_map::iterator i = pg_map.find(pgid); + if (i != pg_map.end()) + return i->second; + } + RWLock::WLocker l(pg_map_lock); ceph::unordered_map::iterator i = pg_map.find(pgid); - if (i == pg_map.end()) - session->waiting_for_pg[pgid]; - - map >::iterator wlistiter = - session->waiting_for_pg.find(pgid); - - PG *out = NULL; - if (wlistiter == session->waiting_for_pg.end()) { - out = i->second; + if (i != pg_map.end()) { + return i->second; } else { - wlistiter->second.push_back(op); - register_session_waiting_on_pg(session, pgid); + waiting_for_pg[pgid].push_back(op); + return NULL; } - session->put(); - return out; } bool OSD::_have_pg(spg_t pgid)