]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds/StrayManager: aviod reusing deleted inode in StrayManager::_purge_stray_logged 14570/head
authorZhi Zhang <willzzhang@tencent.com>
Fri, 10 Feb 2017 02:56:46 +0000 (10:56 +0800)
committerNathan Cutler <ncutler@suse.com>
Fri, 14 Apr 2017 21:51:56 +0000 (23:51 +0200)
Signed-off-by: Zhi Zhang <zhangz.david@outlook.com>
(cherry picked from commit 4978e57419482384279d7e784a625f5e5c10961a)

src/mds/StrayManager.cc

index d7f449b66bd1264de94e4125dfeea777fc7096d1..70db149dfcacaa04ca40b8300014579d12170240 100644 (file)
@@ -300,11 +300,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;
@@ -313,6 +308,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)