]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: avoid duplicate lookup when adding entry to OnodeSpace
authorIgor Fedotov <ifedotov@suse.com>
Tue, 16 Aug 2022 14:10:10 +0000 (17:10 +0300)
committerIgor Fedotov <igor.fedotov@croit.io>
Fri, 13 Jan 2023 12:05:41 +0000 (15:05 +0300)
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
src/os/bluestore/BlueStore.cc

index 036ec8b81be95c3784342eb374af86c3f096c0a6..345840cc674266ed458a3105fc75cd1c69870920 100644 (file)
@@ -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;