}
}
-void Locker::drop_locks(Mutation *mut, set<CInode*> *pneed_issue)
+void Locker::_drop_rdlocks(Mutation *mut, set<CInode*> *pneed_issue)
{
- // leftover locks
- set<CInode*> my_need_issue;
- if (!pneed_issue)
- pneed_issue = &my_need_issue;
-
- while (!mut->xlocks.empty()) {
+ while (!mut->rdlocks.empty()) {
bool ni = false;
- MDSCacheObject *p = (*mut->xlocks.begin())->get_parent();
- xlock_finish(*mut->xlocks.begin(), mut, &ni);
+ MDSCacheObject *p = (*mut->rdlocks.begin())->get_parent();
+ rdlock_finish(*mut->rdlocks.begin(), mut, &ni);
if (ni)
pneed_issue->insert((CInode*)p);
}
- while (!mut->rdlocks.empty()) {
+}
+
+void Locker::_drop_non_rdlocks(Mutation *mut, set<CInode*> *pneed_issue)
+{
+ while (!mut->xlocks.empty()) {
bool ni = false;
- MDSCacheObject *p = (*mut->rdlocks.begin())->get_parent();
- rdlock_finish(*mut->rdlocks.begin(), mut, &ni);
+ MDSCacheObject *p = (*mut->xlocks.begin())->get_parent();
+ xlock_finish(*mut->xlocks.begin(), mut, &ni);
if (ni)
pneed_issue->insert((CInode*)p);
}
if (ni)
pneed_issue->insert((CInode*)p);
}
+}
+
+void Locker::drop_locks(Mutation *mut, set<CInode*> *pneed_issue)
+{
+ // leftover locks
+ set<CInode*> my_need_issue;
+ if (!pneed_issue)
+ pneed_issue = &my_need_issue;
+
+ _drop_non_rdlocks(mut, pneed_issue);
+ _drop_rdlocks(mut, pneed_issue);
if (pneed_issue == &my_need_issue)
issue_caps_set(*pneed_issue);
if (!pneed_issue)
pneed_issue = &my_need_issue;
- while (!mut->xlocks.empty()) {
- bool ni = false;
- MDSCacheObject *p = (*mut->xlocks.begin())->get_parent();
- xlock_finish(*mut->xlocks.begin(), mut, &ni);
- if (ni)
- pneed_issue->insert((CInode*)p);
- }
- while (!mut->remote_wrlocks.empty()) {
- remote_wrlock_finish(mut->remote_wrlocks.begin()->first, mut->remote_wrlocks.begin()->second, mut);
- }
- while (!mut->wrlocks.empty()) {
- bool ni = false;
- MDSCacheObject *p = (*mut->wrlocks.begin())->get_parent();
- wrlock_finish(*mut->wrlocks.begin(), mut, &ni);
- if (ni)
- pneed_issue->insert((CInode*)p);
- }
+ _drop_non_rdlocks(mut, pneed_issue);
if (pneed_issue == &my_need_issue)
issue_caps_set(*pneed_issue);
if (!pneed_issue)
pneed_issue = &my_need_issue;
- while (!mut->rdlocks.empty()) {
- bool ni = false;
- MDSCacheObject *p = (*mut->rdlocks.begin())->get_parent();
- rdlock_finish(*mut->rdlocks.begin(), mut, &ni);
- if (ni)
- pneed_issue->insert((CInode*)p);
- }
+ _drop_rdlocks(mut, pneed_issue);
if (pneed_issue == &my_need_issue)
issue_caps_set(*pneed_issue);