Windows: Trace DirectoryCB allocations
authorJeffrey Altman <jaltman@your-file-system.com>
Fri, 25 Jan 2013 00:14:42 +0000 (19:14 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Sat, 2 Feb 2013 17:04:14 +0000 (09:04 -0800)
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 <rdw@steadingsoftware.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>

src/WINNT/afsrdr/common/AFSUserDefines.h
src/WINNT/afsrdr/kernel/lib/AFSFcbSupport.cpp
src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp
src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp
src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp

index 38ba7a2..8fccecc 100644 (file)
 #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
index fec903f..f0a14b5 100644 (file)
@@ -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);
         }
 
index dd342cb..faca71c 100644 (file)
@@ -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);
             }
 
index 9ff1b91..39796bf 100644 (file)
@@ -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);
     }
 
index 5e0c190..4eee3a0 100644 (file)
@@ -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);
                                         }