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)
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 &&
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);