From f96c44aab3d40258b24e8d76be8efb14315d14b5 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Tue, 26 Sep 2023 12:55:41 +0800 Subject: [PATCH] ceph: allow xlock state to be LOCK_SYNC when putting it When the journal logs are successfully flushed the lockers' state could be LOCK_SYNC during the xlock count is non-zero. Fixes: https://tracker.ceph.com/issues/44565 Signed-off-by: Xiubo Li (cherry picked from commit cf42b377c4be665765f4e2136f5ee8e73a6289e5) --- src/mds/Locker.cc | 1 - src/mds/SimpleLock.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 1112dd80ab528..5d7ec56f2251b 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1984,7 +1984,6 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequestRef& mut) void Locker::_finish_xlock(SimpleLock *lock, client_t xlocker, bool *pneed_issue) { - ceph_assert(!lock->is_stable()); if (lock->get_type() != CEPH_LOCK_DN && lock->get_type() != CEPH_LOCK_ISNAP && lock->get_type() != CEPH_LOCK_IPOLICY && diff --git a/src/mds/SimpleLock.h b/src/mds/SimpleLock.h index ef41c40885571..2a7a5fc806e74 100644 --- a/src/mds/SimpleLock.h +++ b/src/mds/SimpleLock.h @@ -417,7 +417,7 @@ public: ceph_assert(state == LOCK_XLOCK || state == LOCK_XLOCKDONE || state == LOCK_XLOCKSNAP || state == LOCK_LOCK_XLOCK || state == LOCK_LOCK || /* if we are a leader of a peer */ - state == LOCK_PREXLOCK || + state == LOCK_PREXLOCK || state == LOCK_SYNC || is_locallock()); --more()->num_xlock; parent->put(MDSCacheObject::PIN_LOCK); -- 2.39.5