try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- lCount = AFSObjectInfoIncrement( pObjectInfoCB);
+ lCount = AFSObjectInfoIncrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
AFSDeleteObjectInfo( pObjectInfoCB);
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_ERROR,
"AFSInitializeGlobalDirectory AFS_DIR_ENTRY_TAG allocation failure\n");
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectory AFS_DIR_ENTRY_TAG allocated %p\n",
+ pDirNode);
+
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
AFS_DIR_ENTRY_NP_TAG);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- lCount = AFSObjectInfoIncrement( pObjectInfoCB);
+ lCount = AFSObjectInfoIncrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
if( pDirNode == NULL)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_ERROR,
+ "AFSInitializeGlobalDirectoryEntries AFS_DIR_ENTRY_TAG allocation failure\n");
+
AFSDeleteObjectInfo( pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeGlobalDirectoryEntries AFS_DIR_ENTRY_TAG allocated %p\n",
+ pDirNode);
+
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
AFS_DIR_ENTRY_NP_TAG);
FileName);
}
- lCount = AFSObjectInfoIncrement( pObjectInfoCB);
+ lCount = AFSObjectInfoIncrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_DIRENTRY);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitDirEntry AFS_DIR_ENTRY_TAG allocated %p\n",
+ pDirNode);
+
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
AFS_DIR_ENTRY_NP_TAG);
if( pDirNode != NULL)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitDirEntry AFS_DIR_ENTRY_TAG deallocating %p\n",
+ pDirNode);
+
AFSExFreePoolWithTag( pDirNode, AFS_DIR_ENTRY_TAG);
pDirNode = NULL;
if( pObjectInfoCB != NULL)
{
- lCount = AFSObjectInfoDecrement( pObjectInfoCB);
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_DIRENTRY);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
pDirEntry->FileType == AFS_FILE_TYPE_INVALID)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE_2,
+ "AFSValidateSymLink Invalid type Status %08lX\n",
+ STATUS_OBJECT_NAME_NOT_FOUND);
+
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
// Reference the node so it won't be torn down
//
- lCount = AFSObjectInfoIncrement( pObjectInfo);
+ lCount = AFSObjectInfoIncrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
if( pObjectInfo != NULL)
{
- lCount = AFSObjectInfoDecrement( pObjectInfo);
+ lCount = AFSObjectInfoDecrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
if( pSysName == NULL)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE_2,
+ "AFSSubstituteSysName No sysname %wZ Status %08lX\n",
+ &ComponentName,
+ STATUS_OBJECT_NAME_NOT_FOUND);
+
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
if ( pCurrentObject )
{
- lCount = AFSObjectInfoIncrement( pCurrentObject);
+ lCount = AFSObjectInfoIncrement( pCurrentObject,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
if ( pCurrentObject)
{
- lCount = AFSObjectInfoDecrement( pCurrentObject);
+ lCount = AFSObjectInfoDecrement( pCurrentObject,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
// Reference the node so it won't be torn down
//
- lCount = AFSObjectInfoIncrement( pCurrentObject);
+ lCount = AFSObjectInfoIncrement( pCurrentObject,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
// Reference the node so it won't be torn down
//
- lCount = AFSObjectInfoIncrement( pNextObject);
+ lCount = AFSObjectInfoIncrement( pNextObject,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
if ( pCurrentObject )
{
- lCount = AFSObjectInfoDecrement( pCurrentObject);
+ lCount = AFSObjectInfoDecrement( pCurrentObject,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSValidateDirectoryCache Clear VALID flag on DE %p Reference count %08lX\n",
+ "AFSValidateDirectoryCache Clear VALID flag on DE %p Reference count %d\n",
pCurrentDirEntry,
pCurrentDirEntry->DirOpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSValidateDirectoryCache Processing INVALID DE %p Reference count %08lX\n",
+ "AFSValidateDirectoryCache Processing INVALID DE %p Reference count %d\n",
pCurrentDirEntry,
pCurrentDirEntry->DirOpenReferenceCount);
UNICODE_STRING uniShareName;
ULONG ulEntryLength = 0;
AFSNonPagedDirectoryCB *pNonPagedDirEntry = NULL;
+ LONG lCount;
__Enter
{
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ lCount = AFSObjectInfoIncrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitializeSpecialShareNameList (srvsvc) Initializing count (1) on object %p\n",
- pObjectInfoCB);
-
- pObjectInfoCB->ObjectReferenceCount = 1;
+ "AFSInitializeSpecialShareNameList (srvsvc) Increment count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount);
pObjectInfoCB->FileType = (ULONG) AFS_FILE_TYPE_SPECIAL_SHARE_NAME;
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList (srvsvc) AFS_DIR_ENTRY_TAG allocated %p\n",
+ pDirNode);
+
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
AFS_DIR_ENTRY_NP_TAG);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ lCount = AFSObjectInfoIncrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitializeSpecialShareNameList (ipc$) Initializing count (1) on object %p\n",
- pObjectInfoCB);
-
- pObjectInfoCB->ObjectReferenceCount = 1;
+ "AFSInitializeSpecialShareNameList (ipc$) Incrementing count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount);
pObjectInfoCB->FileType = (ULONG) AFS_FILE_TYPE_SPECIAL_SHARE_NAME;
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitializeSpecialShareNameList (ipc$) AFS_DIR_ENTRY_TAG allocated %p\n",
+ pDirNode);
+
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
AFS_DIR_ENTRY_NP_TAG);
pNameArray->LinkCount = 0;
- lCount = InterlockedIncrement( &DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedIncrement( &DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitNameArray Increment count on %wZ DE %p Cnt %d\n",
+ "AFSInitNameArray [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
+ pNameArray,
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
lCount);
pCurrentElement->DirectoryCB = DirectoryCB->ObjectInformation->VolumeCB->DirectoryCB;
- lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSPopulateNameArray Increment count on volume %wZ DE %p Cnt %d\n",
+ "AFSPopulateNameArray [NA:%p] Increment count on volume %wZ DE %p Cnt %d\n",
+ NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
lCount);
SetFlag( pCurrentElement->Flags, AFS_NAME_ARRAY_FLAG_ROOT_ELEMENT);
}
- lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSPopulateNameArrayFromRelatedArray Increment count on %wZ DE %p Cnt %d\n",
+ "AFSPopulateNameArrayFromRelatedArray [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
+ NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
lCount);
pCurrentElement = &NameArray->ElementArray[ lElement];
- lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSFreeNameArray Decrement count on %wZ DE %p Cnt %d\n",
+ "AFSFreeNameArray [NA:%p] Decrement count on %wZ DE %p Cnt %d\n",
+ NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
lCount);
lCount = InterlockedIncrement( &NameArray->Count);
- lCount = InterlockedIncrement( &DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedIncrement( &DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInsertNextElement Increment count on %wZ DE %p Cnt %d\n",
+ "AFSInsertNextElement [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
+ NameArray,
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
lCount);
- ASSERT( lCount >= 2);
+ ASSERT( lCount > 0);
pCurrentElement->DirectoryCB = DirectoryCB;
try_return( pCurrentElement);
}
- lCount = InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBackupEntry Decrement count on %wZ DE %p Cnt %d\n",
+ "AFSBackupEntry [NA:%p] Decrement count on %wZ DE %p Cnt %d\n",
+ NameArray,
&NameArray->CurrentEntry->DirectoryCB->NameInformation.FileName,
NameArray->CurrentEntry->DirectoryCB,
lCount);
pCurrentElement = &NameArray->ElementArray[ lElement];
- lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSResetNameArray Decrement count on %wZ DE %p Cnt %d\n",
+ "AFSResetNameArray [NA:%p] Decrement count on %wZ DE %p Cnt %d\n",
+ NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
lCount);
NameArray->LinkCount = 0;
- lCount = InterlockedIncrement( &DirectoryCB->DirOpenReferenceCount);
+ lCount = InterlockedIncrement( &DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSResetNameArray Increment count on %wZ DE %p Cnt %d\n",
+ "AFSResetNameArray [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
+ NameArray,
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
lCount);
}
NTSTATUS
-AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo)
+AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ParentObjectInfo)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
__Enter
{
- pObjectInfoCB = AFSAllocateObjectInfo( ObjectInfo,
+ pObjectInfoCB = AFSAllocateObjectInfo( ParentObjectInfo,
0);
if( pObjectInfoCB == NULL)
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ lCount = AFSObjectInfoIncrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_DIRENTRY);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitPIOCtlDirectoryCB Initializing count (1) on object %p\n",
- pObjectInfoCB);
-
- pObjectInfoCB->ObjectReferenceCount = 1;
+ "AFSInitPIOCtlDirectoryCB Increment count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount);
pObjectInfoCB->FileType = (ULONG) AFS_FILE_TYPE_PIOCTL;
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( pObjectInfoCB);
-
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitPIOCtlDirectoryCB AFS_DIR_ENTRY_TAG allocated %p\n",
+ pDirNode);
+
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
AFS_DIR_ENTRY_NP_TAG);
pDirNode->CaseInsensitiveTreeEntry.HashIndex = AFSGenerateCRC( &pDirNode->NameInformation.FileName,
TRUE);
- if ( InterlockedCompareExchangePointer( (PVOID *)&ObjectInfo->Specific.Directory.PIOCtlDirectoryCB, pDirNode, NULL) != NULL)
+ if ( InterlockedCompareExchangePointer( (PVOID *)&ParentObjectInfo->Specific.Directory.PIOCtlDirectoryCB, pDirNode, NULL) != NULL)
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSInitPIOCtlDirectoryCB Raced PIOCtlDirectoryCB %p pFcb %p\n",
- ObjectInfo->Specific.Directory.PIOCtlDirectoryCB,
+ ParentObjectInfo->Specific.Directory.PIOCtlDirectoryCB,
pDirNode);
- //
- // Increment the open reference and handle on the node
- //
-
- lCount = AFSObjectInfoIncrement( pDirNode->ObjectInformation);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitPIOCtlDirectoryCB Increment count on Object %p Cnt %d\n",
- pDirNode->ObjectInformation,
- lCount);
-
try_return( ntStatus = STATUS_REPARSE);
}
if ( pDirNode != NULL)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitPIOCtlDirectoryCB AFS_DIR_ENTRY_TAG deallocating %p\n",
+ pDirNode);
+
AFSExFreePoolWithTag( pDirNode, AFS_DIR_ENTRY_TAG);
}
if ( pObjectInfoCB != NULL)
{
+ lCount = AFSObjectInfoDecrement( pObjectInfoCB,
+ AFS_OBJECT_REFERENCE_DIRENTRY);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInitPIOCtlDirectoryCB Decrement count on object %p Cnt %d\n",
+ pObjectInfoCB,
+ lCount);
+
AFSDeleteObjectInfo( pObjectInfoCB);
}
}
if( ParentObjectInfo != NULL)
{
- lCount = AFSObjectInfoIncrement( ParentObjectInfo);
+
+ lCount = AFSObjectInfoIncrement( ParentObjectInfo,
+ AFS_OBJECT_REFERENCE_CHILD);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSAllocateObjectInfo Increment count on parent object %p Cnt %d\n",
+ ParentObjectInfo,
+ lCount);
}
//
}
LONG
-AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo)
+AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
+ IN LONG Reason)
{
LONG lCount;
}
}
+ InterlockedIncrement( &ObjectInfo->ObjectReferences[ Reason]);
+
AFSReleaseResource( &ObjectInfo->NonPagedInfo->ObjectInfoLock);
return lCount;
}
LONG
-AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo)
+AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
+ IN LONG Reason)
{
LONG lCount;
lCount = InterlockedDecrement( &ObjectInfo->ObjectReferenceCount);
}
+ lCount = InterlockedDecrement( &ObjectInfo->ObjectReferences[ Reason]);
+
+ ASSERT( lCount >= 0);
+
AFSReleaseResource( &ObjectInfo->NonPagedInfo->ObjectInfoLock);
return lCount;
return;
}
+ ASSERT( ObjectInfo->ObjectReferenceCount == 0);
+
if( !ExIsResourceAcquiredExclusiveLite( ObjectInfo->VolumeCB->ObjectInfoTree.TreeLock))
{
if( ObjectInfo->ParentObjectInformation != NULL)
{
- lCount = AFSObjectInfoDecrement( ObjectInfo->ParentObjectInformation);
+ lCount = AFSObjectInfoDecrement( ObjectInfo->ParentObjectInformation,
+ AFS_OBJECT_REFERENCE_CHILD);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSDeleteObjectInfo Decrement count on parent object %p Cnt %d\n",
+ ObjectInfo->ParentObjectInformation,
+ lCount);
}
if( bAcquiredTreeLock)
//
// Pass back the target dir entry for this request
+ // The caller must release the DirOpenReferenceCount
//
*TargetDirEntry = pDirectoryEntry;
NTSTATUS ntStatus = STATUS_SUCCESS;
AFSDirectoryCB *pDirNode = NULL, *pLastDirNode = NULL;
+ LONG lCount;
__Enter
{
if( AFSGlobalDotDirEntry != NULL)
{
+ lCount = AFSObjectInfoDecrement( AFSGlobalDotDirEntry->ObjectInformation,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
AFSDeleteObjectInfo( AFSGlobalDotDirEntry->ObjectInformation);
ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
if( AFSGlobalDotDotDirEntry != NULL)
{
+ lCount = AFSObjectInfoDecrement( AFSGlobalDotDotDirEntry->ObjectInformation,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
AFSDeleteObjectInfo( AFSGlobalDotDotDirEntry->ObjectInformation);
ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
pLastDirNode = (AFSDirectoryCB *)pDirNode->ListEntry.fLink;
+ lCount = AFSObjectInfoDecrement( pDirNode->ObjectInformation,
+ AFS_OBJECT_REFERENCE_GLOBAL);
+
AFSDeleteObjectInfo( pDirNode->ObjectInformation);
ExDeleteResourceLite( &pDirNode->NonPaged->Lock);
pObjectInfo = &pVolumeCB->ObjectInformation;
- lCount = AFSObjectInfoIncrement( pObjectInfo);
+ lCount = AFSObjectInfoIncrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_STATUS);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Increment1 count on object %p Cnt %d\n",
+ pObjectInfo,
+ lCount);
lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
// Reference the node so it won't be torn down
//
- lCount = AFSObjectInfoIncrement( pObjectInfo);
+ lCount = AFSObjectInfoIncrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_STATUS);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Increment count on object %p Cnt %d\n",
+ "AFSGetObjectStatus Increment2 count on object %p Cnt %d\n",
pObjectInfo,
lCount);
}
&uniParsedName,
pNameArray,
AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL |
- AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL,
+ AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL,
&pVolumeCB,
&pParentDirEntry,
&pDirectoryEntry,
}
//
- // Remove the reference made above
+ // Remove the reference obtained from AFSLocateNameEntry
//
lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
pObjectInfo = pDirectoryEntry->ObjectInformation;
- lCount = AFSObjectInfoIncrement( pObjectInfo);
+ lCount = AFSObjectInfoIncrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_STATUS);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Increment3 count on object %p Cnt %d\n",
+ pObjectInfo,
+ lCount);
if( pVolumeCB != NULL)
{
if( pObjectInfo != NULL)
{
- lCount = AFSObjectInfoDecrement( pObjectInfo);
+ lCount = AFSObjectInfoDecrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_STATUS);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Decrement count on object %p Cnt %d\n",
+ pObjectInfo,
+ lCount);
}
if( pNameArray != NULL)
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSCheckSymlinkAccess Failed to locate entry %wZ\n",
- ComponentName);
+ "AFSCheckSymlinkAccess Failed to locate entry %wZ ntStatus %08X\n",
+ ComponentName,
+ STATUS_OBJECT_NAME_NOT_FOUND);
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
AFSExtent *pEntry;
ULONG ulProcessCount = 0;
ULONG ulCount = 0;
+ LONG lCount;
__Enter
{
}
}
- if( ObjectInfo != NULL)
- {
+ //
+ // Destroy the reference passed in by the caller to AFSInvalidateObject
+ // or AFSQueueInvalidateObject
+ //
- AFSObjectInfoDecrement( ObjectInfo);
- }
+ lCount = AFSObjectInfoDecrement( ObjectInfo,
+ AFS_OBJECT_REFERENCE_INVALIDATION);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSPerformObjectInvalidation Decrement count on object %p Cnt %d\n",
+ ObjectInfo,
+ lCount);
}
return ntStatus;