From 4811fd8844d1294ee37c14bac7cfae776d09c9b4 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 24 Jan 2013 19:14:42 -0500 Subject: [PATCH] Windows: Trace DirectoryCB allocations Add a trace subsystem for tracking Directory Entry allocations and deallocations to assist with debugging. Change-Id: Ic5f0361bf10752f50d433d3e9f4792b32bec8de1 Reviewed-on: http://gerrit.openafs.org/8960 Reviewed-by: Rod Widdowson Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/common/AFSUserDefines.h | 3 ++ src/WINNT/afsrdr/kernel/lib/AFSFcbSupport.cpp | 20 +++++++++++ src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp | 46 +++++++++++++++++++++++++- src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp | 5 +++ src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp | 10 ++++++ 5 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsrdr/common/AFSUserDefines.h b/src/WINNT/afsrdr/common/AFSUserDefines.h index 38ba7a2..8fccecc 100644 --- a/src/WINNT/afsrdr/common/AFSUserDefines.h +++ b/src/WINNT/afsrdr/common/AFSUserDefines.h @@ -197,6 +197,9 @@ #define AFS_SUBSYSTEM_INIT_PROCESSING 0x00080000 // Redirector Initialization #define AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING 0x00100000 // Name Array Processing #define AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING 0x00200000 // Name Array DirectoryCB refcnts +#define AFS_SUBSYSTEM_FCB_ALLOCATION 0x01000000 // AFSFileCB Allocation +#define AFS_SUBSYSTEM_DIRENTRY_ALLOCATION 0x02000000 // AFSDirectoryCB Allocation +#define AFS_SUBSYSTEM_OBJINFO_ALLOCATION 0x04000000 // AFSObjectInformationCB Allocation // // Invalidation Reasons diff --git a/src/WINNT/afsrdr/kernel/lib/AFSFcbSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSFcbSupport.cpp index fec903f..f0a14b5 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSFcbSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSFcbSupport.cpp @@ -565,6 +565,11 @@ AFSInitVolume( IN GUID *AuthGroup, try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES); } + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSInitVolume AFS_DIR_ENTRY_TAG allocated %p\n", + pVolumeCB->DirectoryCB); + pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSExAllocatePoolWithTag( NonPagedPool, sizeof( AFSNonPagedDirectoryCB), AFS_DIR_ENTRY_NP_TAG); @@ -707,6 +712,11 @@ try_exit: if( pVolumeCB->DirectoryCB != NULL) { + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSInitVolume AFS_DIR_ENTRY_TAG deallocating %p\n", + pVolumeCB->DirectoryCB); + AFSExFreePoolWithTag( pVolumeCB->DirectoryCB, AFS_DIR_ENTRY_TAG); } @@ -818,6 +828,11 @@ AFSRemoveVolume( IN AFSVolumeCB *VolumeCB) AFSExFreePoolWithTag( VolumeCB->ObjectInformation.Specific.Directory.PIOCtlDirectoryCB->NonPaged, AFS_DIR_ENTRY_NP_TAG); + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSRemoveVolume (pioctl) AFS_DIR_ENTRY_TAG deallocating %p\n", + VolumeCB->ObjectInformation.Specific.Directory.PIOCtlDirectoryCB); + AFSExFreePoolWithTag( VolumeCB->ObjectInformation.Specific.Directory.PIOCtlDirectoryCB, AFS_DIR_ENTRY_TAG); } @@ -871,6 +886,11 @@ AFSRemoveVolume( IN AFSVolumeCB *VolumeCB) AFSExFreePoolWithTag( VolumeCB->DirectoryCB->NonPaged, AFS_DIR_ENTRY_NP_TAG); } + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSRemoveVolume AFS_DIR_ENTRY_TAG deallocating %p\n", + VolumeCB->DirectoryCB); + AFSExFreePoolWithTag( VolumeCB->DirectoryCB, AFS_DIR_ENTRY_TAG); } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index dd342cb..faca71c 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -693,13 +693,18 @@ AFSInitializeGlobalDirectoryEntries() 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); @@ -799,11 +804,20 @@ AFSInitializeGlobalDirectoryEntries() 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); @@ -1004,6 +1018,11 @@ AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, 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); @@ -1187,6 +1206,11 @@ try_exit: 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; @@ -4343,6 +4367,11 @@ AFSInitializeSpecialShareNameList() 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); @@ -4431,6 +4460,11 @@ AFSInitializeSpecialShareNameList() 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); @@ -5859,6 +5893,11 @@ AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo) 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); @@ -5935,6 +5974,11 @@ try_exit: 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); } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp index 9ff1b91..39796bf 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp @@ -2580,6 +2580,11 @@ AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, // Free up the dir entry // + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSDeleteDirEntry AFS_DIR_ENTRY_TAG deallocating %p\n", + DirEntry); + AFSExFreePoolWithTag( DirEntry, AFS_DIR_ENTRY_TAG); } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp index 5e0c190..4eee3a0 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp @@ -1217,6 +1217,11 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) AFSExFreePoolWithTag( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->NonPaged, AFS_DIR_ENTRY_NP_TAG); + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSPrimaryVolumeWorkerThread (pioctl) AFS_DIR_ENTRY_TAG deallocating %p\n", + pCurrentObject->Specific.Directory.PIOCtlDirectoryCB); + AFSExFreePoolWithTag( pCurrentObject->Specific.Directory.PIOCtlDirectoryCB, AFS_DIR_ENTRY_TAG); } @@ -1480,6 +1485,11 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context) AFSExFreePoolWithTag( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->NonPaged, AFS_DIR_ENTRY_NP_TAG); + AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION, + AFS_TRACE_LEVEL_VERBOSE, + "AFSPrimaryVolumeWorkerThread (pioctl) AFS_DIR_ENTRY_TAG deallocating %p\n", + pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB); + AFSExFreePoolWithTag( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB, AFS_DIR_ENTRY_TAG); } -- 1.9.4