From: "Yan, Zheng" <zheng.z.yan@xxxxxxxxx> Locker::acquire_locks() skip auth pinning replica object if we only request a rdlock and the lock is read-lockable. To get all locks, we may call Locker::acquire_locks() several times, locks in replca objects may become not read-lockable between calls. So it is possible we need auth pin new objects after already take some locks. Signed-off-by: Yan, Zheng <zheng.z.yan@xxxxxxxxx> --- src/mds/Locker.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index c500be5..63f8311 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -286,11 +286,12 @@ bool Locker::acquire_locks(MDRequest *mdr, continue; if (!object->is_auth()) { + if (!mdr->locks.empty()) + mds->locker->drop_locks(mdr); if (object->is_ambiguous_auth()) { // wait dout(10) << " ambiguous auth, waiting to authpin " << *object << dendl; object->add_waiter(MDSCacheObject::WAIT_SINGLEAUTH, new C_MDS_RetryRequest(mdcache, mdr)); - mds->locker->drop_locks(mdr); mdr->drop_local_auth_pins(); return false; } -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html