From 054fbc46914c7802e0e8810b1c2bdd1460609b02 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 8 Jul 2011 09:47:34 -0700 Subject: [PATCH] mds: refactor drop_*_locks() to use helpers This slightly changes the unlock order for drop_locks() (rdlocks now last instead of after xlocks, before [remote_]wrlocks). Signed-off-by: Sage Weil --- src/mds/Locker.cc | 60 +++++++++++++++++++---------------------------- src/mds/Locker.h | 2 ++ 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index e6fff443c0294..6ffa819dc8d44 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -455,24 +455,23 @@ void Locker::set_xlocks_done(Mutation *mut) } } -void Locker::drop_locks(Mutation *mut, set *pneed_issue) +void Locker::_drop_rdlocks(Mutation *mut, set *pneed_issue) { - // leftover locks - set 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 *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); } @@ -486,6 +485,17 @@ void Locker::drop_locks(Mutation *mut, set *pneed_issue) if (ni) pneed_issue->insert((CInode*)p); } +} + +void Locker::drop_locks(Mutation *mut, set *pneed_issue) +{ + // leftover locks + set 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); @@ -498,23 +508,7 @@ void Locker::drop_non_rdlocks(Mutation *mut, 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); @@ -526,13 +520,7 @@ void Locker::drop_rdlocks(Mutation *mut, 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); diff --git a/src/mds/Locker.h b/src/mds/Locker.h index 39f01f80bf460..04016f866f76f 100644 --- a/src/mds/Locker.h +++ b/src/mds/Locker.h @@ -77,6 +77,8 @@ protected: void send_lock_message(SimpleLock *lock, int msg, const bufferlist &data); // -- locks -- + void _drop_rdlocks(Mutation *mut, set *pneed_issue); + void _drop_non_rdlocks(Mutation *mut, set *pneed_issue); public: void include_snap_rdlocks(set& rdlocks, CInode *in); void include_snap_rdlocks_wlayout(set& rdlocks, CInode *in, -- 2.39.5