]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: do not trim the inodes from the lru list in standby_replay 41144/head
authorXiubo Li <xiubli@redhat.com>
Wed, 21 Apr 2021 13:00:19 +0000 (21:00 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 4 May 2021 14:00:17 +0000 (16:00 +0200)
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 <xiubli@redhat.com>
(cherry picked from commit 79bb44c1b9f1715378a9550a81984e949e454ff4)

src/mds/MDCache.cc

index 83497ff06dfc211dd1b4f82d95f88ddf354af72b..a9db94a0907c5f8719181e92c5d1c39788794d82 100644 (file)
@@ -6586,7 +6586,7 @@ std::pair<bool, uint64_t> 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<bool, uint64_t> 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);