From 04736d688d772897d1b0315917db9d8751f21bed Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Fri, 24 Jul 2020 05:29:15 +0000 Subject: [PATCH] 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 --- src/mds/CInode.h | 3 +++ src/mds/MDCache.cc | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 6809d52fc5e23..cbe8779a20188 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 f771ca5455622..629e53abb2747 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. -- 2.39.5