]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix use-after-free in MDCache::disambiguate_imports
authorYan, Zheng <zyan@redhat.com>
Wed, 18 Jan 2017 04:54:49 +0000 (12:54 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 19 Jan 2017 06:59:20 +0000 (14:59 +0800)
MDCache::try_trim_non_auth_subtree() frees the CDir

Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/MDCache.cc

index c0e54385b3d52054ddd2729a1a3f9d62e812e8d4..3beae2ea7a12299bfc6897563e16ebb40d695470 100644 (file)
@@ -3513,6 +3513,8 @@ void MDCache::disambiguate_imports()
       dout(10) << "ambiguous import auth known, must not be me " << *dir << dendl;
       cancel_ambiguous_import(dir);
 
+      mds->mdlog->start_submit_entry(new EImportFinish(dir, false));
+
       // subtree may have been swallowed by another node claiming dir
       // as their own.
       CDir *root = get_subtree_root(dir);
@@ -3520,8 +3522,6 @@ void MDCache::disambiguate_imports()
        dout(10) << "  subtree root is " << *root << dendl;
       assert(root->dir_auth.first != mds->get_nodeid());  // no us!
       try_trim_non_auth_subtree(root);
-
-      mds->mdlog->start_submit_entry(new EImportFinish(dir, false));
     } else {
       dout(10) << "ambiguous import auth unclaimed, must be me " << *dir << dendl;
       finish_ambiguous_import(q->first);