mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
CInode::freeze_inode() is used in the case of cross authority rename. Server::handle_slave_rename_prep() calls it to wait for all other operations on source inode to complete. This happens after all locks for the rename operation are acquired. But to acquire locks, we need auth pin locks' parent objects first. So there is an ABBA deadlock if someone auth pins the source inode after locks for rename are acquired and before Server::handle_slave_rename_prep() is called. The fix is freeze and auth pin the source inode at the same time. This patch introduces CInode::freeze_auth_pin(), it waits for all other MDRequests to release auth pins, then change the inode to FROZENAUTHPIN state, this state prevents other MDRequests from getting new auth pins. Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com> |
||
---|---|---|
.. | ||
MAuth.h | ||
MAuthReply.h | ||
MBackfillReserve.h | ||
MCacheExpire.h | ||
MClientCapRelease.h | ||
MClientCaps.h | ||
MClientLease.h | ||
MClientReconnect.h | ||
MClientReply.h | ||
MClientRequest.h | ||
MClientRequestForward.h | ||
MClientSession.h | ||
MClientSnap.h | ||
MCommand.h | ||
MCommandReply.h | ||
MDentryLink.h | ||
MDentryUnlink.h | ||
MDirUpdate.h | ||
MDiscover.h | ||
MDiscoverReply.h | ||
MExportCaps.h | ||
MExportCapsAck.h | ||
MExportDir.h | ||
MExportDirAck.h | ||
MExportDirCancel.h | ||
MExportDirDiscover.h | ||
MExportDirDiscoverAck.h | ||
MExportDirFinish.h | ||
MExportDirNotify.h | ||
MExportDirNotifyAck.h | ||
MExportDirPrep.h | ||
MExportDirPrepAck.h | ||
MForward.h | ||
MGenericMessage.h | ||
MGetPoolStats.h | ||
MGetPoolStatsReply.h | ||
MHeartbeat.h | ||
MInodeFileCaps.h | ||
MLock.h | ||
MLog.h | ||
MLogAck.h | ||
MMDSBeacon.h | ||
MMDSCacheRejoin.h | ||
MMDSFindIno.h | ||
MMDSFindInoReply.h | ||
MMDSFragmentNotify.h | ||
MMDSLoadTargets.h | ||
MMDSMap.h | ||
MMDSResolve.h | ||
MMDSResolveAck.h | ||
MMDSSlaveRequest.h | ||
MMDSTableRequest.h | ||
MMonCommand.h | ||
MMonCommandAck.h | ||
MMonElection.h | ||
MMonGetMap.h | ||
MMonGetVersion.h | ||
MMonGetVersionReply.h | ||
MMonGlobalID.h | ||
MMonJoin.h | ||
MMonMap.h | ||
MMonPaxos.h | ||
MMonProbe.h | ||
MMonSubscribe.h | ||
MMonSubscribeAck.h | ||
MOSDAlive.h | ||
MOSDBoot.h | ||
MOSDFailure.h | ||
MOSDMap.h | ||
MOSDOp.h | ||
MOSDOpReply.h | ||
MOSDPGBackfill.h | ||
MOSDPGCreate.h | ||
MOSDPGInfo.h | ||
MOSDPGLog.h | ||
MOSDPGMissing.h | ||
MOSDPGNotify.h | ||
MOSDPGQuery.h | ||
MOSDPGRemove.h | ||
MOSDPGScan.h | ||
MOSDPGTemp.h | ||
MOSDPGTrim.h | ||
MOSDPing.h | ||
MOSDRepScrub.h | ||
MOSDScrub.h | ||
MOSDSubOp.h | ||
MOSDSubOpReply.h | ||
MPGStats.h | ||
MPGStatsAck.h | ||
MPing.h | ||
MPoolOp.h | ||
MPoolOpReply.h | ||
MRecoveryReserve.h | ||
MRemoveSnaps.h | ||
MRoute.h | ||
MStatfs.h | ||
MStatfsReply.h | ||
MWatchNotify.h | ||
PaxosServiceMessage.h |