From: Mark Nelson Date: Fri, 24 Jul 2020 05:29:15 +0000 (+0000) Subject: mds/CInode: Optimize only pinned by subtrees check X-Git-Tag: v14.2.12~14^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=04736d688d772897d1b0315917db9d8751f21bed;p=ceph.git mds/CInode: Optimize only pinned by subtrees check Fixes: https://tracker.ceph.com/issues/46727 Signed-off-by: Mark Nelson (cherry picked from commit 6a865f805b723525358ed8e79bb3d41709e98bf3) Conflicts: src/mds/MDCache.cc - use the nautilus code flow of trim instead master --- diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 6809d52fc5e2..cbe8779a2018 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -600,6 +600,9 @@ public: ls.push_back(dir); } } + int get_num_subtree_roots() const { + return num_subtree_roots; + } CDir *get_or_open_dirfrag(MDCache *mdcache, frag_t fg); CDir *add_dirfrag(CDir *dir); diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index f771ca545562..629e53abb274 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -6706,9 +6706,7 @@ std::pair MDCache::trim(uint64_t count) if (!diri->is_auth()) { if (dir->get_num_ref() > 1) // only subtree pin continue; - list ls; - diri->get_subtree_dirfrags(ls); - if (diri->get_num_ref() > (int)ls.size()) // only pinned by subtrees + if (diri->get_num_ref() > diri->get_num_subtree_roots()) continue; // don't trim subtree root if its auth MDS is recovering.