From d2b54c0ac42625715e9f74e06fa20820c2b7aa28 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 13 Apr 2013 01:55:26 -0400 Subject: [PATCH] Windows: ObjectInfoCB update last access time Each time the ObjectInformationCB object is looked up from the ObjectInfoTree the LastAccessCount field should be updated except in cases of invalidation, garbage collection, and extent processing. This is particularly important when an ObjectInfoCB is attached to DirectoryCB in AFSInitDirEntry and when constructing directory snapshots or validating directory content. Change-Id: Ife412b723a1bdc922ffdfeca71061fcfd1ce721a Reviewed-on: http://gerrit.openafs.org/9784 Reviewed-by: Rod Widdowson Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp | 2 ++ src/WINNT/afsrdr/kernel/lib/AFSDirControl.cpp | 6 ++++++ src/WINNT/afsrdr/kernel/lib/AFSFSControl.cpp | 2 ++ src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp index c7ba719b1..e11fecd00 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp @@ -1017,6 +1017,8 @@ AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB, SetFlag( pDirNode->Flags, AFS_DIR_ENTRY_VALID); + KeQueryTickCount( &ObjectInfoCB->LastAccessCount); + if( pCurrentDirEntry->ShortNameLength > 0 && pDirNode->NameInformation.ShortNameLength > 0) { diff --git a/src/WINNT/afsrdr/kernel/lib/AFSDirControl.cpp b/src/WINNT/afsrdr/kernel/lib/AFSDirControl.cpp index 39ddc0808..2ef7b71e6 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSDirControl.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSDirControl.cpp @@ -1699,6 +1699,12 @@ AFSSnapshotDirectory( IN AFSFcb *Fcb, pSnapshotEntry->NameHash = (ULONG)pDirEntry->CaseSensitiveTreeEntry.HashIndex; pSnapshotEntry++; + + if ( pDirEntry->ObjectInformation != NULL) + { + + KeQueryTickCount( &pDirEntry->ObjectInformation->LastAccessCount); + } } else { diff --git a/src/WINNT/afsrdr/kernel/lib/AFSFSControl.cpp b/src/WINNT/afsrdr/kernel/lib/AFSFSControl.cpp index 16012f7eb..dc1414146 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSFSControl.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSFSControl.cpp @@ -1023,6 +1023,8 @@ AFSProcessUserFsRequest( IN PIRP Irp) "AFSProcessUserFsRequest Increment count on object %p Cnt %d\n", pParentObjectInfo, lCount)); + + KeQueryTickCount( &pParentObjectInfo->LastAccessCount); } AFSReleaseResource( pFcb->ObjectInformation->VolumeCB->ObjectInfoTree.TreeLock); diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 6417b19c3..42770e6ac 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -1159,6 +1159,8 @@ AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, pObjectInfoCB, lCount)); + KeQueryTickCount( &pObjectInfoCB->LastAccessCount); + AFSReleaseResource( ParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock); ntStatus = STATUS_SUCCESS; @@ -8040,6 +8042,8 @@ AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo, "AFSGetObjectStatus Increment2 count on object %p Cnt %d\n", pObjectInfo, lCount)); + + KeQueryTickCount( &pObjectInfo->LastAccessCount); } AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock); -- 2.39.5