From 24860c9f9ac2343acb92301c2a4cb64f05c5db81 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 9 Jan 2009 10:44:02 -0800 Subject: [PATCH] mds: can_xlock_soon() should include LOCK_LOCK i.e., if we are already xlocked. This avoids calling {file,scatter}_lock on an already LOCK_LOCK lock. --- src/mds/FileLock.h | 3 ++- src/mds/Locker.cc | 4 +++- src/mds/ScatterLock.h | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/mds/FileLock.h b/src/mds/FileLock.h index cb83c662004cb..fa87e14fa7045 100644 --- a/src/mds/FileLock.h +++ b/src/mds/FileLock.h @@ -168,7 +168,8 @@ class FileLock : public ScatterLock { if (parent->is_auth()) return (state == LOCK_SYNC_LOCK || state == LOCK_LONER_LOCK || - state == LOCK_MIXED_LOCK); + state == LOCK_MIXED_LOCK || + state == LOCK_LOCK); else return false; } diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 930fa557d59de..41a9c24a1c291 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -2276,6 +2276,7 @@ bool Locker::scatter_xlock_start(ScatterLock *lock, MDRequest *mut) } // initiate lock + assert(lock->get_state() != LOCK_LOCK); scatter_lock(lock); // fall-thru to below. @@ -3322,7 +3323,8 @@ bool Locker::file_xlock_start(FileLock *lock, MDRequest *mut) return false; } - // initiate lock + // initiate lock + assert(lock->get_state() != LOCK_LOCK); file_lock(lock); // fall-thru to below. diff --git a/src/mds/ScatterLock.h b/src/mds/ScatterLock.h index 3853b9535e8f2..ccf72f911400a 100644 --- a/src/mds/ScatterLock.h +++ b/src/mds/ScatterLock.h @@ -144,7 +144,8 @@ public: bool can_xlock_soon() { if (parent->is_auth()) return (state == LOCK_SCATTER_LOCK || - state == LOCK_SYNC_LOCK); + state == LOCK_SYNC_LOCK || + state == LOCK_LOCK); else return false; } -- 2.39.5