mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
fix(metanode): verlist's lock may fall into a deadlock because of lock reentrancy and other lock concurrency
Signed-off-by: leonrayang <chl696@sina.com>
This commit is contained in:
parent
bfd3174895
commit
4a7d43e898
@ -70,11 +70,16 @@ func (mp *metaPartition) fsmRemoveXAttr(reqExtend *Extend) (err error) {
|
||||
if reqExtend.verSeq == math.MaxUint64 {
|
||||
reqExtend.verSeq = 0
|
||||
}
|
||||
|
||||
e.versionMu.Lock()
|
||||
defer e.versionMu.Unlock()
|
||||
if reqExtend.verSeq < e.GetMinVer() {
|
||||
return
|
||||
}
|
||||
|
||||
mp.multiVersionList.RWLock.RLock()
|
||||
defer mp.multiVersionList.RWLock.RUnlock()
|
||||
|
||||
if reqExtend.verSeq > e.verSeq {
|
||||
e.multiVers = append([]*Extend{e.Copy().(*Extend)}, e.multiVers...)
|
||||
e.verSeq = reqExtend.verSeq
|
||||
|
||||
@ -390,8 +390,6 @@ func (v *VolVersionInfoList) GetNextOlderVer(ver uint64) (verSeq uint64, err err
|
||||
}
|
||||
|
||||
func (v *VolVersionInfoList) GetNextNewerVer(ver uint64) (verSeq uint64, err error) {
|
||||
v.RWLock.RLock()
|
||||
defer v.RWLock.RUnlock()
|
||||
log.LogDebugf("getNextOlderVer ver %v", ver)
|
||||
for idx, info := range v.VerList {
|
||||
log.LogDebugf("getNextOlderVer id %v ver %v info %v", idx, info.Ver, info)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user