From: Patrick Donnelly Date: Fri, 5 Jun 2020 01:58:10 +0000 (-0700) Subject: mds: refactor remove_subtree X-Git-Tag: v15.2.5~172^2~13 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=13ca86639bd75b9d33e249f702ee3683760a3643;p=ceph.git mds: refactor remove_subtree Search each map only once as necessary. Signed-off-by: Patrick Donnelly (cherry picked from commit 747687f5dec8adc86abafb367275373bb44d96e9) --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 508f6badd32..32615b38866 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -1265,14 +1265,16 @@ CDir *MDCache::get_projected_subtree_root(CDir *dir) void MDCache::remove_subtree(CDir *dir) { dout(10) << "remove_subtree " << *dir << dendl; - ceph_assert(subtrees.count(dir)); - ceph_assert(subtrees[dir].empty()); - subtrees.erase(dir); + auto it = subtrees.find(dir); + ceph_assert(it != subtrees.end()); + subtrees.erase(it); dir->put(CDir::PIN_SUBTREE); if (dir->get_parent_dir()) { CDir *p = get_subtree_root(dir->get_parent_dir()); - ceph_assert(subtrees[p].count(dir)); - subtrees[p].erase(dir); + auto it = subtrees.find(p); + ceph_assert(it != subtrees.end()); + auto count = it->second.erase(dir); + ceph_assert(count == 1); } }