]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: refactor remove_subtree
authorPatrick Donnelly <pdonnell@redhat.com>
Fri, 5 Jun 2020 01:58:10 +0000 (18:58 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 2 Jul 2020 00:19:53 +0000 (17:19 -0700)
Search each map only once as necessary.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 747687f5dec8adc86abafb367275373bb44d96e9)

src/mds/MDCache.cc

index 508f6badd32d2e8bee9117fb54868ad281e720ef..32615b3886608752bc7871d7b50da77513880de5 100644 (file)
@@ -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);
   }
 }