From: Igor Fedotov Date: Tue, 16 Aug 2022 14:10:10 +0000 (+0300) Subject: os/bluestore: avoid duplicate lookup when adding entry to OnodeSpace X-Git-Tag: v18.1.0~404^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7eed358e57dd55153b06bd39161008958d07dc45;p=ceph.git os/bluestore: avoid duplicate lookup when adding entry to OnodeSpace Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 036ec8b81be..345840cc674 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1928,15 +1928,15 @@ BlueStore::OnodeRef BlueStore::OnodeSpace::add_onode(const ghobject_t& oid, OnodeRef& o) { std::lock_guard l(cache->lock); - auto p = onode_map.find(oid); - if (p != onode_map.end()) { + // add entry or return existing one + auto p = onode_map.emplace(oid, o); + if (!p.second) { ldout(cache->cct, 30) << __func__ << " " << oid << " " << o - << " raced, returning existing " << p->second + << " raced, returning existing " << p.first->second << dendl; - return p->second; + return p.first->second; } ldout(cache->cct, 20) << __func__ << " " << oid << " " << o << dendl; - onode_map[oid] = o; cache->_add(o.get(), 1); cache->_trim(); return o;