]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds/StrayManager: aviod reusing deleted inode in StrayManager::_purge_stray_logged
authorZhi Zhang <willzzhang@tencent.com>
Fri, 10 Feb 2017 02:56:46 +0000 (10:56 +0800)
committerZhi Zhang <willzzhang@tencent.com>
Fri, 10 Feb 2017 02:56:46 +0000 (10:56 +0800)
Signed-off-by: Zhi Zhang <zhangz.david@outlook.com>
src/mds/StrayManager.cc

index f62c73dab49176f80d176551dd9588d3d2ad2c2e..57fb7ca29c1a82a185347a41b7666804456bbcc2 100644 (file)
@@ -301,11 +301,6 @@ void StrayManager::_purge_stray_logged(CDentry *dn, version_t pdv, LogSegment *l
   dn->state_clear(CDentry::STATE_PURGING | CDentry::STATE_PURGINGPINNED);
   dn->put(CDentry::PIN_PURGING);
 
-  // drop inode
-  if (in->is_dirty())
-    in->mark_clean();
-  in->mdcache->remove_inode(in);
-
   // drop dentry?
   if (dn->is_new()) {
     dout(20) << " dn is new, removing" << dendl;
@@ -314,6 +309,11 @@ void StrayManager::_purge_stray_logged(CDentry *dn, version_t pdv, LogSegment *l
   } else {
     in->mdcache->touch_dentry_bottom(dn);  // drop dn as quickly as possible.
   }
+
+  // drop inode
+  if (in->is_dirty())
+    in->mark_clean();
+  in->mdcache->remove_inode(in);
 }
 
 void StrayManager::enqueue(CDentry *dn, bool trunc)