From: Greg Farnum Date: Mon, 17 May 2010 22:14:03 +0000 (-0700) Subject: mds: drop distributed locks on waiting filelock messages, so they don't block X-Git-Tag: v0.22~346^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8d85f3443454ff46bc0c9eef5496f7793f1a81e6;p=ceph.git mds: drop distributed locks on waiting filelock messages, so they don't block --- diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 54214b98952..96913257f98 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -386,6 +386,7 @@ void Locker::drop_locks(Mutation *mut) rdlock_finish(*mut->rdlocks.begin(), mut); while (!mut->wrlocks.empty()) wrlock_finish(*mut->wrlocks.begin(), mut); + mut->done_locking = false; } void Locker::drop_rdlocks(Mutation *mut) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 824e68fc4a0..fb0d4a71abd 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -2625,6 +2625,8 @@ void Server::handle_client_file_setlock(MDRequest *mdr) reply_request(mdr, -1); else { dout(0) << "but it's a wait" << dendl; + mds->locker->drop_locks(mdr); + mdr->drop_local_auth_pins(); cur->add_waiter(CInode::WAIT_FLOCK, new C_MDS_RetryRequest(mdcache, mdr)); } }