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();
// 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);
}
}
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)
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);
}
}
}
}
-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)
// 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());
+ }
}
}
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<SimpleLock*>& locks);
bool rdlock_try_set(set<SimpleLock*>& locks);
void rdlock_take_set(set<SimpleLock*>& locks);
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);