From: Yan, Zheng Date: Tue, 28 Jan 2014 04:22:46 +0000 (+0800) Subject: mds: fix slave rename rollback X-Git-Tag: v0.78~165^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c54b3ceaace3a50f1d82d1503132af28547cc564;p=ceph.git mds: fix slave rename rollback use rollback bufferlist to decide if the inode is being exported. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index a6fa9f0eeb3c..def63b4d091e 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -6792,19 +6792,20 @@ void Server::_commit_slave_rename(MDRequest *mdr, int r, mdlog->submit_entry(le, new C_MDS_CommittedSlave(this, mdr)); mdlog->flush(); } else { - if (srcdn->is_auth() && destdnl->is_primary()) { - dout(10) << " reversing inode export of " << *destdnl->get_inode() << dendl; - destdnl->get_inode()->abort_export(); - } // abort // rollback_bl may be empty if we froze the inode but had to provide an expanded // witness list from the master, and they failed before we tried prep again. if (mdr->more()->rollback_bl.length()) { + if (mdr->more()->is_inode_exporter) { + dout(10) << " reversing inode export of " << *destdnl->get_inode() << dendl; + destdnl->get_inode()->abort_export(); + } if (mdcache->is_ambiguous_slave_update(mdr->reqid, mdr->slave_to_mds)) { mdcache->remove_ambiguous_slave_update(mdr->reqid, mdr->slave_to_mds); // rollback but preserve the slave request do_rename_rollback(mdr->more()->rollback_bl, mdr->slave_to_mds, mdr, false); + mdr->more()->rollback_bl.clear(); } else do_rename_rollback(mdr->more()->rollback_bl, mdr->slave_to_mds, mdr, true); } else {