From: Xiubo Li Date: Wed, 21 Apr 2021 13:00:19 +0000 (+0800) Subject: mds: do not trim the inodes from the lru list in standby_replay X-Git-Tag: v14.2.22~38^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=0e6518bf54d3e1d1474f85b25d13272ea755130e;p=ceph.git mds: do not trim the inodes from the lru list in standby_replay In standby_replay, if some dentries just added/linked but not get a chance to replay the EOpen journals followed, if the upkeep_main() is excuted, which will may trim them out immediately. Then when playing the EOpen journals later the replay will fail. In standby_replay, let's skip trimming them if dentry's linkage inode is not nullptr. Fixes: https://tracker.ceph.com/issues/50246 Signed-off-by: Xiubo Li (cherry picked from commit 79bb44c1b9f1715378a9550a81984e949e454ff4) --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 83497ff06dfc2..a9db94a0907c5 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -6586,7 +6586,7 @@ std::pair MDCache::trim_lru(uint64_t count, expiremap& expiremap unexpirables.clear(); // trim dentries from the LRU until count is reached - // if mds is in standbyreplay and will trim all inodes which aren't in segments + // if mds is in standby_replay and skip trimming the inodes while (!throttled && (cache_toofull() || count > 0 || is_standby_replay)) { throttled |= trim_counter_start+trimmed >= trim_threshold; if (throttled) break; @@ -6594,8 +6594,7 @@ std::pair MDCache::trim_lru(uint64_t count, expiremap& expiremap if (!dn) { break; } - if ((is_standby_replay && dn->get_linkage()->inode && - dn->get_linkage()->inode->item_open_file.is_on_list())) { + if (is_standby_replay && dn->get_linkage()->inode) { // we move the inodes that need to be trimmed to the end of the lru queue. // refer to MDCache::standby_trim_segment lru.lru_insert_bot(dn);