]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: properly set STATE_STRAY/STATE_ORPHAN for stray dentry/inode 6553/head
authorYan, Zheng <zyan@redhat.com>
Thu, 12 Nov 2015 13:57:27 +0000 (21:57 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 12 Nov 2015 13:57:27 +0000 (21:57 +0800)
Fixes: #13777
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/MDCache.cc

index 3ec852a97d136f909ec3a6a82943887219226fda..65b4ff8c4d596b4e3d165b30ede4e1561534bbea 100644 (file)
@@ -6622,12 +6622,6 @@ void MDCache::trim_non_auth()
       if (dnl->is_remote() && dnl->get_inode() && !dnl->get_inode()->is_auth())
        dn->unlink_remote(dnl);
 
-      if (dn->get_dir()->get_inode()->is_stray()) {
-       dn->state_set(CDentry::STATE_STRAY);
-       if (dnl->is_primary() && dnl->get_inode()->inode.nlink == 0)
-         dnl->get_inode()->state_set(CInode::STATE_ORPHAN);
-      }
-
       if (!first_auth) {
        first_auth = dn;
       } else {
@@ -9185,10 +9179,14 @@ void MDCache::scan_stray_dir(dirfrag_t next)
     }
     for (CDir::map_t::iterator q = dir->items.begin(); q != dir->items.end(); ++q) {
       CDentry *dn = q->second;
+      dn->state_set(CDentry::STATE_STRAY);
       CDentry::linkage_t *dnl = dn->get_projected_linkage();
       stray_manager.notify_stray_created();
       if (dnl->is_primary()) {
-       maybe_eval_stray(dnl->get_inode());
+       CInode *in = dnl->get_inode();
+       if (in->inode.nlink == 0)
+         in->state_set(CInode::STATE_ORPHAN);
+       maybe_eval_stray(in);
       }
     }
   }