]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: drop distributed locks on waiting filelock messages, so they don't block
authorGreg Farnum <gregf@hq.newdream.net>
Mon, 17 May 2010 22:14:03 +0000 (15:14 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Mon, 2 Aug 2010 17:39:56 +0000 (10:39 -0700)
src/mds/Locker.cc
src/mds/Server.cc

index 54214b98952fb000eaa646edd3d37a0d6424a625..96913257f9828f58c3d8ac397b349605efb70734 100644 (file)
@@ -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)
index 824e68fc4a044a506a5185647eee860e4272fdce..fb0d4a71abda56fae2a3b3942f8da4efa462b441 100644 (file)
@@ -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));
       }
     }