From: Jeffrey Altman Date: Sat, 13 Apr 2013 05:52:45 +0000 (-0400) Subject: Windows: AFSFindObjectInfo update last access time X-Git-Tag: upstream/1.8.0_pre1^2~1204 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=c51e9b35813b8630a297094df722d2f2a2e60927;p=packages%2Fo%2Fopenafs.git Windows: AFSFindObjectInfo update last access time Add a boolean parameter to AFSFindObjectInfo() which is used to indicate whether or not the last access time for the found ObjectInfoCB should be updated. Set the new parameter in all calls to AFSFindObjectInfo(). Change-Id: Ib50d772af6857db7b8c13f2054e910f1ef5a1b7e Reviewed-on: http://gerrit.openafs.org/9783 Tested-by: BuildBot Reviewed-by: Rod Widdowson Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp b/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp index 6f2bcf169..c5aa1fa71 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSCleanup.cpp @@ -110,7 +110,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject, { pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + FALSE); } pRootFcb = pObjectInfo->VolumeCB->RootFcb; diff --git a/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp b/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp index cddd8fb04..5fc49adc3 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSClose.cpp @@ -162,7 +162,8 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject, { pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + FALSE); } if( pParentObjectInfo != NULL && @@ -327,7 +328,8 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject, { pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + FALSE); } // @@ -515,7 +517,8 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject, { pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + FALSE); } AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING, diff --git a/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp index d86070159..c7ba719b1 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp @@ -1967,7 +1967,8 @@ AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB, pObjectInfo = DirectoryCB->ObjectInformation; pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + FALSE); stDelete.ParentId = pObjectInfo->ParentFileId; @@ -2688,7 +2689,8 @@ AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo, { pParentObjectInfo = AFSFindObjectInfo( ObjectInfo->VolumeCB, - &ObjectInfo->ParentFileId); + &ObjectInfo->ParentFileId, + TRUE); stTargetID.ParentId = ObjectInfo->ParentFileId; } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSCreate.cpp b/src/WINNT/afsrdr/kernel/lib/AFSCreate.cpp index ea0d7bc2c..81d9d8aa4 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSCreate.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSCreate.cpp @@ -2372,7 +2372,8 @@ AFSOpenTargetDirectory( IN PIRP Irp, { pGrandParentObject = AFSFindObjectInfo( pParentObject->VolumeCB, - &pParentObject->ParentFileId); + &pParentObject->ParentFileId, + TRUE); if ( pGrandParentObject) { @@ -3710,7 +3711,8 @@ AFSOpenSpecialShareFcb( IN PIRP Irp, { pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + TRUE); } if( DirectoryCB->ObjectInformation->Fcb == NULL) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp index cbc272bb8..384623734 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp @@ -2011,7 +2011,8 @@ AFSSetBasicInfo( IN PIRP Irp, { AFSObjectInfoCB * pParentObjectInfo = AFSFindObjectInfo( DirectoryCB->ObjectInformation->VolumeCB, - &DirectoryCB->ObjectInformation->ParentFileId); + &DirectoryCB->ObjectInformation->ParentFileId, + TRUE); if ( pParentObjectInfo != NULL) { @@ -2343,7 +2344,8 @@ AFSSetFileLinkInfo( IN PIRP Irp) { pSrcParentObject = AFSFindObjectInfo( pSrcFcb->ObjectInformation->VolumeCB, - &pSrcFcb->ObjectInformation->ParentFileId); + &pSrcFcb->ObjectInformation->ParentFileId, + TRUE); } if( pSrcParentObject == NULL) @@ -2778,7 +2780,8 @@ AFSSetRenameInfo( IN PIRP Irp) { pSrcParentObject = AFSFindObjectInfo( pSrcFcb->ObjectInformation->VolumeCB, - &pSrcFcb->ObjectInformation->ParentFileId); + &pSrcFcb->ObjectInformation->ParentFileId, + TRUE); } if( pSrcParentObject == NULL) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 2c4dc075a..6417b19c3 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -1705,7 +1705,8 @@ AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo, { pParentObjectInfo = AFSFindObjectInfo( (*ppObjectInfo)->VolumeCB, - &(*ppObjectInfo)->ParentFileId); + &(*ppObjectInfo)->ParentFileId, + FALSE); } if( (*ppObjectInfo)->FileType == AFS_FILE_TYPE_SYMLINK || @@ -2251,7 +2252,8 @@ AFSIsChildOfParent( IN AFSFcb *Dcb, } pParentObjectInfo = AFSFindObjectInfo( pCurrentFcb->ObjectInformation->VolumeCB, - &pCurrentFcb->ObjectInformation->ParentFileId); + &pCurrentFcb->ObjectInformation->ParentFileId, + FALSE); if ( pParentObjectInfo != NULL) { @@ -6170,7 +6172,8 @@ AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo, AFSObjectInfoCB * AFSFindObjectInfo( IN AFSVolumeCB *VolumeCB, - IN AFSFileID *FileId) + IN AFSFileID *FileId, + IN BOOLEAN bUpdateLastUse) { DWORD ntStatus = STATUS_SUCCESS; ULONGLONG ullIndex; @@ -6205,6 +6208,12 @@ AFSFindObjectInfo( IN AFSVolumeCB *VolumeCB, "AFSFindObjectInfo Decrement count on object %p Cnt %d\n", pObjectInfo, lCount)); + + if ( bUpdateLastUse) + { + + KeQueryTickCount( &pObjectInfo->LastAccessCount); + } } AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock); @@ -6292,7 +6301,9 @@ AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo) { pParentObjectInfo = AFSFindObjectInfo( pVolume, - &pObjectInfo->ParentFileId); + &pObjectInfo->ParentFileId, + FALSE); + if( pParentObjectInfo != NULL) { diff --git a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp index 94d61543b..4bb0203ee 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp @@ -1947,7 +1947,8 @@ AFSLocateNameEntry( IN GUID *AuthGroup, { pParentObjectInfo = AFSFindObjectInfo( pCurrentObject->VolumeCB, - &pCurrentObject->ParentFileId); + &pCurrentObject->ParentFileId, + FALSE); } ASSERT( pParentObjectInfo != NULL); diff --git a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp index 490438d0d..32b2bd916 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp @@ -1650,7 +1650,7 @@ AFSExamineVolume( IN AFSVolumeCB *pVolumeCB) // bReleaseVolumeTreeLock = AFSAcquireExcl( pVolumeCB->ObjectInfoTree.TreeLock, - FALSE); + TRUE); } pCurrentObject = pNextObject; diff --git a/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h b/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h index 2a70bfe5d..6cb2d45d1 100644 --- a/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h +++ b/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h @@ -1340,7 +1340,8 @@ AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo); AFSObjectInfoCB * AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB, - IN AFSFileID * FileID); + IN AFSFileID * FileID, + IN BOOLEAN bUpdateLastUse); void AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);