]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph: allow xlock state to be LOCK_SYNC when putting it 53663/head
authorXiubo Li <xiubli@redhat.com>
Tue, 26 Sep 2023 04:55:41 +0000 (12:55 +0800)
committerXiubo Li <xiubli@redhat.com>
Tue, 26 Sep 2023 05:02:54 +0000 (13:02 +0800)
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 <xiubli@redhat.com>
(cherry picked from commit cf42b377c4be665765f4e2136f5ee8e73a6289e5)

src/mds/Locker.cc
src/mds/SimpleLock.h

index 409185f7398ff95a7763f31e950302da6a795e3b..4f362c8b109d96e167845e40e1e0eff50d747414 100644 (file)
@@ -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 &&
index ef41c4088557127667f863976ac2bcef34b883ee..2a7a5fc806e7476f294cf1b6fb1caa929e605ceb 100644 (file)
@@ -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);