From 747687f5dec8adc86abafb367275373bb44d96e9 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Thu, 4 Jun 2020 18:58:10 -0700 Subject: [PATCH] mds: refactor remove_subtree Search each map only once as necessary. Signed-off-by: Patrick Donnelly --- src/mds/MDCache.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index c7f5f66e0367c..980967f925a48 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); } } -- 2.39.5