AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
AFSObjectInfoCB *pObjectInfoCB = NULL;
AFSNonPagedDirectoryCB *pNonPagedDirEntry = NULL;
+ LONG lCount;
__Enter
{
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- InterlockedIncrement( &pObjectInfoCB->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfoCB->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeGlobalDirectoryEntries Increment count on object %08lX Cnt %d\n",
pObjectInfoCB,
- pObjectInfoCB->ObjectReferenceCount);
+ lCount);
ntStatus = STATUS_SUCCESS;
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- InterlockedIncrement( &pObjectInfoCB->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfoCB->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeGlobalDirectoryEntries Increment count on object %08lX Cnt %d\n",
pObjectInfoCB,
- pObjectInfoCB->ObjectReferenceCount);
+ lCount);
ntStatus = STATUS_SUCCESS;
BOOLEAN bAllocatedObjectCB = FALSE;
ULONGLONG ullIndex = 0;
AFSNonPagedDirectoryCB *pNonPagedDirEntry = NULL;
+ LONG lCount;
__Enter
{
FileName);
}
- InterlockedIncrement( &pObjectInfoCB->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfoCB->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry Increment count on object %08lX Cnt %d\n",
pObjectInfoCB,
- pObjectInfoCB->ObjectReferenceCount);
+ lCount);
AFSReleaseResource( ParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
if( pObjectInfoCB != NULL)
{
- InterlockedDecrement( &pObjectInfoCB->ObjectReferenceCount);
+ lCount = InterlockedDecrement( &pObjectInfoCB->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry Decrement count on object %08lX Cnt %d\n",
pObjectInfoCB,
- pObjectInfoCB->ObjectReferenceCount);
+ lCount);
if( bAllocatedObjectCB)
{
AFSObjectInfoCB *pObjectInfo = NULL;
IO_STATUS_BLOCK stIoStatus;
ULONG ulFilter = 0;
+ LONG lCount;
__Enter
{
if( pVolumeCB != NULL)
{
- InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Increment count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
AFSReleaseResource( &pDevExt->Specific.RDR.VolumeTreeLock);
FILE_NOTIFY_CHANGE_SIZE,
FILE_ACTION_MODIFIED);
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
try_return( ntStatus);
}
AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
TRUE);
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
// Reference the node so it won't be torn down
//
- InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Increment count on object %08lX Cnt %d\n",
pObjectInfo,
- pObjectInfo->ObjectReferenceCount);
+ lCount);
}
AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
pObjectInfo->ParentObjectInformation->FileId.Unique);
SetFlag( pObjectInfo->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
+
pObjectInfo->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+
pObjectInfo->ParentObjectInformation->Expiration.QuadPart = 0;
}
ulFilter,
FILE_ACTION_REMOVED);
- if( pObjectInfo->FileType == AFS_FILE_TYPE_FILE &&
- pObjectInfo->Fcb != NULL)
+ if( NT_SUCCESS( AFSQueueInvalidateObject( pObjectInfo,
+ InvalidateCB->Reason)))
{
-
-
- //
- // Clear out the extents
- // And get rid of them (note this involves waiting
- // for any writes or reads to the cache to complete)
- //
-
- (VOID) AFSTearDownFcbExtents( pObjectInfo->Fcb,
- NULL);
+ pObjectInfo = NULL; // We'll dec the count in the worker item
}
break;
SetFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
+ if( InvalidateCB->Reason == AFS_INVALIDATE_DATA_VERSION &&
+ NT_SUCCESS( AFSQueueInvalidateObject( pObjectInfo,
+ InvalidateCB->Reason)))
+ {
+ pObjectInfo = NULL; // We'll dec the count in the worker item
+ }
+
break;
}
}
if( pObjectInfo != NULL)
{
- InterlockedDecrement( &pObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedDecrement( &pObjectInfo->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Decrement count on object %08lX Cnt %d\n",
pObjectInfo,
- pObjectInfo->ObjectReferenceCount);
+ lCount);
}
}
AFSVolumeCB *pVolumeCB = NULL;
AFSFcb *pFcb = NULL;
AFSObjectInfoCB *pCurrentObject = NULL;
+ LONG lCount;
__Enter
{
if( pVolumeCB != NULL)
{
- InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
AFSReleaseResource( &pDevExt->Specific.RDR.VolumeTreeLock);
AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
}
else
{
AFSNameArrayHdr *pNameArray = NULL;
AFSDeviceExt *pDevExt = (AFSDeviceExt *) AFSRDRDeviceObject->DeviceExtension;
+ LONG lCount;
__Enter
{
pNameArray->CurrentEntry = &pNameArray->ElementArray[ 0];
- InterlockedIncrement( &pNameArray->Count);
+ lCount = InterlockedIncrement( &pNameArray->Count);
- InterlockedIncrement( &DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedIncrement( &DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitNameArray Increment count on %wZ DE %p Cnt %d\n",
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
- DirectoryCB->OpenReferenceCount);
+ lCount);
pNameArray->CurrentEntry->DirectoryCB = DirectoryCB;
ULONG ulTotalCount = 0;
ULONG ulIndex = 0;
USHORT usLength = 0;
+ LONG lCount;
__Enter
{
pCurrentElement->DirectoryCB = DirectoryCB->ObjectInformation->VolumeCB->DirectoryCB;
- InterlockedIncrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArray Increment count on volume %wZ DE %p Cnt %d\n",
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount);
pCurrentElement->Component = DirectoryCB->ObjectInformation->VolumeCB->DirectoryCB->NameInformation.FileName;
ULONG ulTotalCount = 0;
ULONG ulIndex = 0;
USHORT usLength = 0;
+ LONG lCount;
__Enter
{
pCurrentElement->FileId = pCurrentElement->DirectoryCB->ObjectInformation->FileId;
- InterlockedIncrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArrayFromRelatedArray Increment count on %wZ DE %p Cnt %d\n",
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount);
- InterlockedIncrement( &NameArray->Count);
+ lCount = InterlockedIncrement( &NameArray->Count);
if( pCurrentElement->DirectoryCB == DirectoryCB ||
NameArray->Count == RelatedNameArray->Count)
NTSTATUS ntStatus = STATUS_SUCCESS;
AFSNameArrayCB *pCurrentElement = NULL;
+ LONG lCount;
__Enter
{
break;
}
- InterlockedDecrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSFreeNameArray Decrement count on %wZ DE %p Cnt %d\n",
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount);
pCurrentElement++;
}
NTSTATUS ntStatus = STATUS_SUCCESS;
AFSDeviceExt *pDevExt = (AFSDeviceExt *) AFSRDRDeviceObject->DeviceExtension;
+ LONG lCount;
__Enter
{
NameArray->CurrentEntry = &NameArray->ElementArray[ 0];
}
- InterlockedIncrement( &NameArray->Count);
+ lCount = InterlockedIncrement( &NameArray->Count);
- InterlockedIncrement( &DirEntry->OpenReferenceCount);
+ lCount = InterlockedIncrement( &DirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInsertNextElement Increment count on %wZ DE %p Cnt %d\n",
&DirEntry->NameInformation.FileName,
DirEntry,
- DirEntry->OpenReferenceCount);
+ lCount);
NameArray->CurrentEntry->DirectoryCB = DirEntry;
AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
IN AFSDirectoryCB *DirectoryCB)
{
+ LONG lCount;
ASSERT( NameArray->CurrentEntry != NULL);
- InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSReplaceCurrentElement Decrement count on %wZ DE %p Cnt %d\n",
&NameArray->CurrentEntry->DirectoryCB->NameInformation.FileName,
NameArray->CurrentEntry->DirectoryCB,
- NameArray->CurrentEntry->DirectoryCB->OpenReferenceCount);
+ lCount);
- InterlockedIncrement( &DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedIncrement( &DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSReplaceCurrentElement Increment count on %wZ DE %p Cnt %d\n",
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
- DirectoryCB->OpenReferenceCount);
+ lCount);
NameArray->CurrentEntry->DirectoryCB = DirectoryCB;
{
AFSDirectoryCB *pCurrentDirEntry = NULL;
+ LONG lCount;
__Enter
{
try_return( pCurrentDirEntry);
}
- InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSBackupEntry Decrement count on %wZ DE %p Cnt %d\n",
&NameArray->CurrentEntry->DirectoryCB->NameInformation.FileName,
NameArray->CurrentEntry->DirectoryCB,
- NameArray->CurrentEntry->DirectoryCB->OpenReferenceCount);
+ lCount);
NameArray->CurrentEntry->DirectoryCB = NULL;
- if( InterlockedDecrement( &NameArray->Count) == 0)
+ lCount = InterlockedDecrement( &NameArray->Count);
+
+ if( lCount == 0)
{
NameArray->CurrentEntry = NULL;
}
AFSNameArrayCB *pCurrentElement = NULL;
AFSDeviceExt *pDevExt = (AFSDeviceExt *) AFSRDRDeviceObject->DeviceExtension;
+ LONG lCount;
__Enter
{
break;
}
- InterlockedDecrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetNameArray Decrement count on %wZ DE %p Cnt %d\n",
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- pCurrentElement->DirectoryCB->OpenReferenceCount);
+ lCount);
pCurrentElement++;
}
NameArray->CurrentEntry = &NameArray->ElementArray[ 0];
- InterlockedIncrement( &NameArray->Count);
+ lCount = InterlockedIncrement( &NameArray->Count);
- InterlockedIncrement( &DirEntry->OpenReferenceCount);
+ lCount = InterlockedIncrement( &DirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetNameArray Increment count on %wZ DE %p Cnt %d\n",
&DirEntry->NameInformation.FileName,
DirEntry,
- DirEntry->OpenReferenceCount);
+ lCount);
NameArray->CurrentEntry->DirectoryCB = DirEntry;
void
AFSSetEnumerationEvent( IN AFSFcb *Fcb)
{
+ LONG lCount;
//
// Depending on the type of node, set the event
0,
FALSE);
- InterlockedIncrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount);
+ lCount = InterlockedIncrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount);
break;
}
0,
FALSE);
- InterlockedIncrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount);
+ lCount = InterlockedIncrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount);
break;
}
AFSClearEnumerationEvent( IN AFSFcb *Fcb)
{
+ LONG lCount;
+
//
// Depending on the type of node, set the event
//
ASSERT( Fcb->NPFcb->Specific.Directory.DirectoryEnumCount > 0);
- if( InterlockedDecrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount) == 0)
+ lCount = InterlockedDecrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount);
+
+ if( lCount == 0)
{
KeClearEvent( &Fcb->NPFcb->Specific.Directory.DirectoryEnumEvent);
ASSERT( Fcb->NPFcb->Specific.Directory.DirectoryEnumCount > 0);
- if( InterlockedDecrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount) == 0)
+ lCount = InterlockedDecrement( &Fcb->NPFcb->Specific.Directory.DirectoryEnumCount);
+
+ if( lCount == 0)
{
KeClearEvent( &Fcb->NPFcb->Specific.Directory.DirectoryEnumEvent);
WCHAR *pwchBuffer = NULL;
UNICODE_STRING uniComponentName, uniRemainingPath, uniParsedName;
ULONG ulNameDifference = 0;
+ LONG lCount;
__Enter
{
if( pDirEntry != NULL)
{
- ntStatus = STATUS_ACCESS_DENIED;
+ ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
}
try_return( ntStatus);
// Increment the ref count on the volume and dir entry for correct processing below
//
- InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRetrieveFileAttributes Increment count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
- InterlockedIncrement( &pParentDirEntry->OpenReferenceCount);
+ lCount = InterlockedIncrement( &pParentDirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- pParentDirEntry->OpenReferenceCount);
+ lCount);
ntStatus = AFSLocateNameEntry( NULL,
NULL,
if( pVolumeCB != NULL)
{
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRetrieveFileAttributes Decrement count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
if( pDirectoryEntry != NULL)
{
- InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pDirectoryEntry->NameInformation.FileName,
pDirectoryEntry,
NULL,
- pDirectoryEntry->OpenReferenceCount);
+ lCount);
}
else
{
- InterlockedDecrement( &pParentDirEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pParentDirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- pParentDirEntry->OpenReferenceCount);
+ lCount);
}
}
// Remove the reference made above
//
- InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pDirectoryEntry->NameInformation.FileName,
pDirectoryEntry,
NULL,
- pDirectoryEntry->OpenReferenceCount);
+ lCount);
try_exit:
if( pVolumeCB != NULL)
{
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRetrieveFileAttributes Decrement2 count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
if( pNameArray != NULL)
NTSTATUS ntStatus = STATUS_SUCCESS;
AFSObjectInfoCB *pObjectInfo = NULL;
+ LONG lCount;
__Enter
{
if( ParentObjectInfo != NULL)
{
- InterlockedIncrement( &ParentObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &ParentObjectInfo->ObjectReferenceCount);
}
//
{
BOOLEAN bAcquiredTreeLock = FALSE;
+ LONG lCount;
if( !ExIsResourceAcquiredExclusiveLite( ObjectInfo->VolumeCB->ObjectInfoTree.TreeLock))
{
if( ObjectInfo->ParentObjectInformation != NULL)
{
- InterlockedDecrement( &ObjectInfo->ParentObjectInformation->ObjectReferenceCount);
+
+ lCount = InterlockedDecrement( &ObjectInfo->ParentObjectInformation->ObjectReferenceCount);
}
if( bAcquiredTreeLock)
UNICODE_STRING uniComponentName, uniRemainingPath, uniParsedName;
ULONG ulNameDifference = 0;
GUID stAuthGroup;
+ LONG lCount;
__Enter
{
if( pDirEntry != NULL)
{
- ntStatus = STATUS_ACCESS_DENIED;
+ ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
}
try_return( ntStatus);
pParentDirEntry = AFSGlobalRoot->DirectoryCB;
- InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSEvaluateRootEntry Increment count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
- InterlockedIncrement( &pParentDirEntry->OpenReferenceCount);
+ lCount = InterlockedIncrement( &pParentDirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- pParentDirEntry->OpenReferenceCount);
+ lCount);
ntStatus = AFSLocateNameEntry( NULL,
NULL,
if( pVolumeCB != NULL)
{
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSEvaluateRootEntry Decrement count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
if( pDirectoryEntry != NULL)
{
- InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pDirectoryEntry->NameInformation.FileName,
pDirectoryEntry,
NULL,
- pDirectoryEntry->OpenReferenceCount);
+ lCount);
}
else
{
- InterlockedDecrement( &pParentDirEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pParentDirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- pParentDirEntry->OpenReferenceCount);
+ lCount);
}
}
if( pVolumeCB != NULL)
{
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSEvaluateRootEntry2 Decrement count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
if( pNameArray != NULL)
ulTimeIncrement = KeQueryTimeIncrement();
pControlDevExt->Specific.Control.ObjectLifeTimeCount.QuadPart = (ULONGLONG)((ULONGLONG)AFS_OBJECT_LIFETIME / (ULONGLONG)ulTimeIncrement);
- pControlDevExt->Specific.Control.FcbPurgeTimeCount.QuadPart = AFS_ONE_SECOND;
- pControlDevExt->Specific.Control.FcbPurgeTimeCount.QuadPart *= AFS_SERVER_PURGE_DELAY;
+ pControlDevExt->Specific.Control.FcbPurgeTimeCount.QuadPart = AFS_SERVER_PURGE_DELAY;
pControlDevExt->Specific.Control.FcbPurgeTimeCount.QuadPart /= ulTimeIncrement;
- pControlDevExt->Specific.Control.FcbFlushTimeCount.QuadPart = (ULONGLONG)((ULONGLONG)(AFS_ONE_SECOND * AFS_SERVER_FLUSH_DELAY) / (ULONGLONG)ulTimeIncrement);
+ pControlDevExt->Specific.Control.FcbFlushTimeCount.QuadPart = (ULONGLONG)((ULONGLONG)AFS_SERVER_FLUSH_DELAY / (ULONGLONG)ulTimeIncrement);
pControlDevExt->Specific.Control.ExtentRequestTimeCount.QuadPart = (ULONGLONG)((ULONGLONG)AFS_EXTENT_REQUEST_TIME/(ULONGLONG)ulTimeIncrement);
//
UNICODE_STRING uniFullPathName, uniRemainingPath, uniComponentName, uniParsedName;
AFSNameArrayHdr *pNameArray = NULL;
AFSDirectoryCB *pDirectoryEntry = NULL, *pParentDirEntry = NULL;
+ LONG lCount;
__Enter
{
if( pVolumeCB != NULL)
{
- InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
AFSReleaseResource( &pDevExt->Specific.RDR.VolumeTreeLock);
pObjectInfo = &pVolumeCB->ObjectInformation;
- InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
}
else
{
AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
TRUE);
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Decrement count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
ullIndex = AFSCreateLowIndex( &GetStatusInfo->FileID);
// Reference the node so it won't be torn down
//
- InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment count on object %08lX Cnt %d\n",
pObjectInfo,
- pObjectInfo->ObjectReferenceCount);
+ lCount);
}
AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
// Increment the ref count on the volume and dir entry for correct processing below
//
- InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
- InterlockedIncrement( &pParentDirEntry->OpenReferenceCount);
+ lCount = InterlockedIncrement( &pParentDirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- pParentDirEntry->OpenReferenceCount);
+ lCount);
ntStatus = AFSLocateNameEntry( NULL,
NULL,
if( pVolumeCB != NULL)
{
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Decrement count on volume %08lX Cnt %d\n",
pVolumeCB,
- pVolumeCB->VolumeReferenceCount);
+ lCount);
}
if( pDirectoryEntry != NULL)
{
- InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pDirectoryEntry->NameInformation.FileName,
pDirectoryEntry,
NULL,
- pDirectoryEntry->OpenReferenceCount);
+ lCount);
}
else
{
- InterlockedDecrement( &pParentDirEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pParentDirEntry->OpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- pParentDirEntry->OpenReferenceCount);
+ lCount);
}
}
// Remove the reference made above
//
- InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirectoryEntry->OpenReferenceCount);
pObjectInfo = pDirectoryEntry->ObjectInformation;
- InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
if( pVolumeCB != NULL)
{
- InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
if( pObjectInfo != NULL)
{
- InterlockedDecrement( &pObjectInfo->ObjectReferenceCount);
+ lCount = InterlockedDecrement( &pObjectInfo->ObjectReferenceCount);
}
if( pNameArray != NULL)
NTSTATUS ntStatus = STATUS_SUCCESS;
AFSDirectoryCB *pDirEntry = NULL;
ULONG ulCRC = 0;
+ LONG lCount;
__Enter
{
if( pDirEntry != NULL)
{
- InterlockedIncrement( &pDirEntry->OpenReferenceCount);
+ lCount = InterlockedIncrement( &pDirEntry->OpenReferenceCount);
}
AFSReleaseResource( ParentDirectoryCB->ObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock);
ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
- InterlockedDecrement( &pDirEntry->OpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirEntry->OpenReferenceCount);
try_exit:
return ntStatus;
}
+
+NTSTATUS
+AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
+ IN ULONG InvalidateReason)
+{
+
+ NTSTATUS ntStatus = STATUS_SUCCESS;
+ IO_STATUS_BLOCK stIoStatus;
+ LIST_ENTRY *le;
+ AFSExtent *pEntry;
+ ULONG ulProcessCount = 0;
+ ULONG ulCount = 0;
+
+ __Enter
+ {
+
+ switch( InvalidateReason)
+ {
+
+ case AFS_INVALIDATE_DELETED:
+ {
+
+ if( ObjectInfo->FileType == AFS_FILE_TYPE_FILE &&
+ ObjectInfo->Fcb != NULL)
+ {
+
+
+ //
+ // Clear out the extents
+ // And get rid of them (note this involves waiting
+ // for any writes or reads to the cache to complete)
+ //
+
+ (VOID) AFSTearDownFcbExtents( ObjectInfo->Fcb,
+ NULL);
+ }
+
+ break;
+ }
+
+ case AFS_INVALIDATE_DATA_VERSION:
+ {
+
+ if( ObjectInfo->FileType == AFS_FILE_TYPE_FILE &&
+ ObjectInfo->Fcb != NULL)
+ {
+
+ AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->Resource,
+ TRUE);
+
+ AFSLockForExtentsTrim( ObjectInfo->Fcb);
+
+ __try
+ {
+
+ le = ObjectInfo->Fcb->Specific.File.ExtentsLists[AFS_EXTENTS_LIST].Flink;
+
+ ulProcessCount = 0;
+
+ ulCount = (ULONG)ObjectInfo->Fcb->Specific.File.ExtentCount;
+
+ while( ulProcessCount < ulCount)
+ {
+ pEntry = ExtentFor( le, AFS_EXTENTS_LIST );
+
+ if( !BooleanFlagOn( pEntry->Flags, AFS_EXTENT_DIRTY))
+ {
+ CcPurgeCacheSection( &ObjectInfo->Fcb->NPFcb->SectionObjectPointers,
+ &pEntry->FileOffset,
+ pEntry->Size,
+ FALSE);
+ }
+
+ ulProcessCount++;
+ le = le->Flink;
+ }
+ }
+ __except( EXCEPTION_EXECUTE_HANDLER)
+ {
+
+ ntStatus = GetExceptionCode();
+ }
+
+ AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsResource );
+
+ AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource);
+
+ AFSReleaseCleanExtents( ObjectInfo->Fcb,
+ NULL);
+ }
+
+ break;
+ }
+
+ default:
+ {
+
+ break;
+ }
+ }
+
+ if( ObjectInfo != NULL)
+ {
+ InterlockedDecrement( &ObjectInfo->ObjectReferenceCount);
+ }
+ }
+
+ return ntStatus;
+}