From: Yan, Zheng Date: Wed, 30 Nov 2016 14:19:28 +0000 (+0800) Subject: mds: only send slave rmdir prepare to auth mds of subtree X-Git-Tag: v12.0.0~253^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=99c9147452fa8a1b1cd7f1b03a0aa86ec5ad3124;p=ceph.git mds: only send slave rmdir prepare to auth mds of subtree 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 --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 4f1057bf7549..af7c513718a3 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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 witnesses; - in->list_replicas(witnesses); + + list 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::iterator p = witnesses.begin();