]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix seg fault in expire_recursive 45055/head
author胡玮文 <huww98@outlook.com>
Thu, 6 Jan 2022 07:43:29 +0000 (15:43 +0800)
committerVicente Cheng <freeze.bilsted@gmail.com>
Wed, 16 Feb 2022 14:49:50 +0000 (14:49 +0000)
Range-based for should not be used when we are altering the container.
Use iterator explicitly instead.

Fixes: https://tracker.ceph.com/issues/53805
Signed-off-by: 胡玮文 <huww98@outlook.com>
(cherry picked from commit d48a2cf7e2481cf9758f2934464ec6d9c35d898b)

src/mds/MDCache.cc

index adf46a839e61e4d760eb1d7bef06a7b38e4e886a..88d2b648d02aede29d8e3ccfed5648968a866d4a 100644 (file)
@@ -3733,8 +3733,9 @@ bool MDCache::expire_recursive(CInode *in, expiremap &expiremap)
       return true;
     }
 
-    for (auto &it : subdir->items) {
-      CDentry *dn = it.second;
+    for (auto it = subdir->items.begin(); it != subdir->items.end();) {
+      CDentry *dn = it->second;
+      it++;
       CDentry::linkage_t *dnl = dn->get_linkage();
       if (dnl->is_primary()) {
        CInode *tin = dnl->get_inode();