]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: only send slave rmdir prepare to auth mds of subtree
authorYan, Zheng <zyan@redhat.com>
Wed, 30 Nov 2016 14:19:28 +0000 (22:19 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 8 Dec 2016 00:12:59 +0000 (08:12 +0800)
This avoid trigger the assertion of path traverse return value
in Server::handle_slave_rmdir_prep.  (Other witness mds may release
the inode before receiving the slave rmdir prepare)

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

index 4f1057bf75491db74fd90eb1739bb1b7ac0c0048..af7c513718a3bb8cbb6e984b4f2ad4587b5df1b3 100644 (file)
@@ -5535,7 +5535,14 @@ void Server::handle_client_unlink(MDRequestRef& mdr)
   if (in->is_dir() && in->has_subtree_root_dirfrag()) {
     // subtree root auths need to be witnesses
     set<mds_rank_t> witnesses;
-    in->list_replicas(witnesses);
+
+    list<CDir*> dfls;
+    in->get_subtree_dirfrags(dfls);
+    for (auto p : dfls) {
+      if (mds->get_nodeid() != p->get_dir_auth().first)
+       witnesses.insert(p->get_dir_auth().first);
+    }
+
     dout(10) << " witnesses " << witnesses << ", have " << mdr->more()->witnessed << dendl;
 
     for (set<mds_rank_t>::iterator p = witnesses.begin();