From: Patrick Donnelly Date: Fri, 5 Jun 2020 01:58:10 +0000 (-0700) Subject: mds: refactor remove_subtree X-Git-Tag: v16.1.0~1933^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=747687f5dec8adc86abafb367275373bb44d96e9;p=ceph.git mds: refactor remove_subtree Search each map only once as necessary. Signed-off-by: Patrick Donnelly --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index c7f5f66e0367..980967f925a4 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -1283,14 +1283,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); } }