From c786391161435e5ef8ae2fb98bc826c1b37ef5cc Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 9 Jun 2011 10:03:08 -0700 Subject: [PATCH] mds: pass pissue_caps through *lock_finish() This allows *lock_finish() callers to handle the issue_caps themselves. None of them do yet (this arg is still optional) so this is patch has no functional change (yet!). Signed-off-by: Sage Weil --- src/mds/Locker.cc | 26 +++++++++++++++----------- src/mds/Locker.h | 6 +++--- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index bac5b1027570b..f5a5fa60904cf 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -889,7 +889,7 @@ void Locker::nudge_log(SimpleLock *lock) mds->mdlog->flush(); } -void Locker::rdlock_finish(SimpleLock *lock, Mutation *mut) +void Locker::rdlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue) { // drop ref lock->put_rdlock(); @@ -903,9 +903,9 @@ void Locker::rdlock_finish(SimpleLock *lock, Mutation *mut) // last one? if (!lock->is_rdlocked()) { if (!lock->is_stable()) - eval_gather(lock); + eval_gather(lock, pneed_issue); else if (lock->get_parent()->is_auth()) - eval(lock); + eval(lock, pneed_issue); } } @@ -1024,7 +1024,7 @@ bool Locker::wrlock_start(SimpleLock *lock, MDRequest *mut, bool nowait) return false; } -void Locker::wrlock_finish(SimpleLock *lock, Mutation *mut) +void Locker::wrlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue) { if (lock->get_type() == CEPH_LOCK_IVERSION || lock->get_type() == CEPH_LOCK_DVERSION) @@ -1039,9 +1039,9 @@ void Locker::wrlock_finish(SimpleLock *lock, Mutation *mut) if (!lock->is_wrlocked()) { if (!lock->is_stable()) - eval_gather(lock); + eval_gather(lock, pneed_issue); else if (lock->get_parent()->is_auth()) - eval(lock); + eval(lock, pneed_issue); } } @@ -1110,7 +1110,7 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequest *mut) } } -void Locker::xlock_finish(SimpleLock *lock, Mutation *mut) +void Locker::xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue) { if (lock->get_type() == CEPH_LOCK_IVERSION || lock->get_type() == CEPH_LOCK_DVERSION) @@ -1165,12 +1165,16 @@ void Locker::xlock_finish(SimpleLock *lock, Mutation *mut) // eval? if (!lock->is_stable()) - eval_gather(lock); + eval_gather(lock, pneed_issue); else { if (lock->get_parent()->is_auth()) - eval(lock); - if (do_issue && lock->get_type() != CEPH_LOCK_DN) - issue_caps((CInode*)lock->get_parent()); + eval(lock, pneed_issue); + if (do_issue && lock->get_type() != CEPH_LOCK_DN) { + if (pneed_issue) + *pneed_issue = true; + else + issue_caps((CInode*)lock->get_parent()); + } } } diff --git a/src/mds/Locker.h b/src/mds/Locker.h index d2c9e3535946b..2c849dc2a253b 100644 --- a/src/mds/Locker.h +++ b/src/mds/Locker.h @@ -123,7 +123,7 @@ public: bool _rdlock_kick(SimpleLock *lock); bool rdlock_try(SimpleLock *lock, client_t client, Context *c); bool rdlock_start(SimpleLock *lock, MDRequest *mut, bool as_anon=false); - void rdlock_finish(SimpleLock *lock, Mutation *mut); + void rdlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue=0); bool can_rdlock_set(set& locks); bool rdlock_try_set(set& locks); void rdlock_take_set(set& locks); @@ -131,10 +131,10 @@ public: void wrlock_force(SimpleLock *lock, Mutation *mut); bool wrlock_start(SimpleLock *lock, MDRequest *mut, bool nowait=false); - void wrlock_finish(SimpleLock *lock, Mutation *mut); + void wrlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue=0); bool xlock_start(SimpleLock *lock, MDRequest *mut); - void xlock_finish(SimpleLock *lock, Mutation *mut); // public for Server's slave UNXLOCK + void xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue=0); void xlock_export(SimpleLock *lock, Mutation *mut); void xlock_import(SimpleLock *lock, Mutation *mut); -- 2.39.5