From 9285cc3d5270306377ef3d6f90468129a8cfd376 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 2 Apr 2013 00:40:54 -0400 Subject: [PATCH] Windows: FindObjectInfo refcnt under lock AFSFindObjectInfo performed the search of Volume object tree protected by the TreeLock but dropped the lock before incrementing the reference count. This behavior contributed to a race with the AFSPrimaryVolumeWorkerThread which has to drop the VolumeCB TreeLock periodically in order to safely cleanup FCBs. Change-Id: I0cba4a118e4835edee7702db97846567618e0adf Reviewed-on: http://gerrit.openafs.org/9719 Reviewed-by: Peter Scott Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 3e85ec239..060b3bbf6 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -6179,6 +6179,11 @@ AFSFindObjectInfo( IN AFSVolumeCB *VolumeCB, AFSObjectInfoCB *pObjectInfo = NULL; LONG lCount; + ullIndex = AFSCreateLowIndex( FileId); + + AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock, + TRUE); + if ( AFSIsEqualFID( &VolumeCB->ObjectInformation.FileId, FileId)) { @@ -6187,16 +6192,9 @@ AFSFindObjectInfo( IN AFSVolumeCB *VolumeCB, else { - AFSAcquireExcl( VolumeCB->ObjectInfoTree.TreeLock, - TRUE); - - ullIndex = AFSCreateLowIndex( FileId); - ntStatus = AFSLocateHashEntry( VolumeCB->ObjectInfoTree.TreeHead, ullIndex, (AFSBTreeEntry **)&pObjectInfo); - - AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock); } if ( NT_SUCCESS( ntStatus)) { @@ -6211,6 +6209,8 @@ AFSFindObjectInfo( IN AFSVolumeCB *VolumeCB, lCount)); } + AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock); + return pObjectInfo; } -- 2.39.5