From 28291bcc02d46265a13212bf0b5429560cbf560a Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Wed, 21 Apr 2021 21:00:19 +0800 Subject: [PATCH] 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) --- src/mds/MDCache.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 8236b429dc488..31355f7a0b552 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -6716,7 +6716,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; @@ -6724,8 +6724,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); -- 2.47.3