From: xie xingguo Date: Mon, 26 Jun 2017 07:05:10 +0000 (+0800) Subject: os/bluestore: narrow cache lock range for OnodeSpace::lookup X-Git-Tag: ses5-milestone8^2~13^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=324cba3b2448fdb024c8bf5ac764dc38fbbde8d6;p=ceph.git os/bluestore: narrow cache lock range for OnodeSpace::lookup Signed-off-by: xie xingguo --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d1417544a25a..2e3da75fc144 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1494,19 +1494,30 @@ BlueStore::OnodeRef BlueStore::OnodeSpace::add(const ghobject_t& oid, OnodeRef o BlueStore::OnodeRef BlueStore::OnodeSpace::lookup(const ghobject_t& oid) { - std::lock_guard l(cache->lock); ldout(cache->cct, 30) << __func__ << dendl; - ceph::unordered_map::iterator p = onode_map.find(oid); - if (p == onode_map.end()) { - ldout(cache->cct, 30) << __func__ << " " << oid << " miss" << dendl; + OnodeRef o; + bool hit = false; + + { + std::lock_guard l(cache->lock); + ceph::unordered_map::iterator p = onode_map.find(oid); + if (p == onode_map.end()) { + ldout(cache->cct, 30) << __func__ << " " << oid << " miss" << dendl; + } else { + ldout(cache->cct, 30) << __func__ << " " << oid << " hit " << p->second + << dendl; + cache->_touch_onode(p->second); + hit = true; + o = p->second; + } + } + + if (hit) { + cache->logger->inc(l_bluestore_onode_hits); + } else { cache->logger->inc(l_bluestore_onode_misses); - return OnodeRef(); } - ldout(cache->cct, 30) << __func__ << " " << oid << " hit " << p->second - << dendl; - cache->_touch_onode(p->second); - cache->logger->inc(l_bluestore_onode_hits); - return p->second; + return o; } void BlueStore::OnodeSpace::clear()