From: Yan, Zheng Date: Fri, 8 Nov 2013 10:42:33 +0000 (+0800) Subject: mds: fix rename notify X-Git-Tag: v0.75~93^2~27 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=31f5b0275efcd1f6686df3bac9070829a9f44e0b;p=ceph.git mds: fix rename notify commit 1d86f77edf (mds: fix cross-authorty rename race) introduced rename notify, but it puts the code in wrong bracket. This patch also fixes a rename notify related bug in MDCache::handle_mds_failure() Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 7c4c982ab7bd..b6edaa46c632 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -2677,7 +2677,7 @@ void MDCache::handle_mds_failure(int who) dout(10) << " slave request " << *p->second << " no longer need rename notity ack from mds." << who << dendl; p->second->more()->waiting_on_slave.erase(who); - if (p->second->more()->waiting_on_slave.empty()) + if (p->second->more()->waiting_on_slave.empty() && p->second->slave_request) mds->queue_waiter(new C_MDS_RetryRequest(this, p->second)); } diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 1c8a34f94397..7bd7c5b466da 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -6484,15 +6484,17 @@ void Server::handle_slave_rename_prep(MDRequest *mdr) if (mdr->slave_request->witnesses.size() > 1) { dout(10) << " set srci ambiguous auth; providing srcdn replica list" << dendl; reply_witness = true; - for (set::iterator p = srcdnrep.begin(); p != srcdnrep.end(); ++p) { - if (*p == mdr->slave_to_mds || - !mds->mdsmap->is_clientreplay_or_active_or_stopping(*p)) - continue; - MMDSSlaveRequest *notify = new MMDSSlaveRequest(mdr->reqid, mdr->attempt, - MMDSSlaveRequest::OP_RENAMENOTIFY); - mds->send_message_mds(notify, *p); - mdr->more()->waiting_on_slave.insert(*p); - } + } + + // make sure bystanders have received all lock related messages + for (set::iterator p = srcdnrep.begin(); p != srcdnrep.end(); ++p) { + if (*p == mdr->slave_to_mds || + !mds->mdsmap->is_clientreplay_or_active_or_stopping(*p)) + continue; + MMDSSlaveRequest *notify = new MMDSSlaveRequest(mdr->reqid, mdr->attempt, + MMDSSlaveRequest::OP_RENAMENOTIFY); + mds->send_message_mds(notify, *p); + mdr->more()->waiting_on_slave.insert(*p); } }