From: Sage Weil Date: Mon, 19 Jan 2009 23:05:57 +0000 (-0800) Subject: mds: drop rdlocks after early reply is sent X-Git-Tag: v0.6~1^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f62bb445299e2bebf958d191fc996a31df7bc31a;p=ceph.git mds: drop rdlocks after early reply is sent We will still hold wrlocks and xlocks until journal entry commits. --- diff --git a/src/TODO b/src/TODO index 5a1ef9307f55..9385db8fec5d 100644 --- a/src/TODO +++ b/src/TODO @@ -6,7 +6,7 @@ v0.6 v0.7 - ENOSPC -- async metadata ops +- fully async file creation v0.8 - cas? @@ -40,7 +40,6 @@ repair on cdir store is sufficient if mdlog survives... - or what the hell, full trace? - mds scrubbing -/- rados scrubbing timer diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index a7ac68901e8c..8556b2b52093 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -366,6 +366,12 @@ void Locker::drop_locks(Mutation *mut) wrlock_finish(*mut->wrlocks.begin(), mut); } +void Locker::drop_rdlocks(Mutation *mut) +{ + while (!mut->rdlocks.empty()) + rdlock_finish(*mut->rdlocks.begin(), mut); +} + // generics diff --git a/src/mds/Locker.h b/src/mds/Locker.h index 7449934472cf..84a27104707c 100644 --- a/src/mds/Locker.h +++ b/src/mds/Locker.h @@ -83,6 +83,7 @@ public: void drop_locks(Mutation *mut); void set_xlocks_done(Mutation *mut); + void drop_rdlocks(Mutation *mut); void eval_gather(SimpleLock *lock); void eval_cap_gather(CInode *in); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 7bb850bec7cb..aed71d1f13cd 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -554,6 +554,7 @@ void Server::early_reply(MDRequest *mdr, CInode *tracei, CDentry *tracedn) // mark xlocks "done", indicating that we are exposing uncommitted changes mds->locker->set_xlocks_done(mdr); + mds->locker->drop_rdlocks(mdr); mdr->did_early_reply = true; }