#include "AFSCommon.h"
+//
+// AFSLocateNameEntry
+//
+// On entry, *VolumeCB must have a held ReferenceCount provided by
+// the caller which will be released. On successful exit, *VolumeCB
+// will be assigned the new current volume with a held ReferenceCount.
+//
+// On entry, *ParentDirectoryCB must have a held DirOpenReferenceCount
+// provided by the caller.
+//
+
NTSTATUS
AFSLocateNameEntry( IN GUID *AuthGroup,
IN PFILE_OBJECT FileObject,
IN UNICODE_STRING *ParsedPathName,
IN AFSNameArrayHdr *NameArray,
IN ULONG Flags,
- OUT AFSVolumeCB **VolumeCB,
+ IN OUT AFSVolumeCB **VolumeCB,
+ IN OUT LONG *pVolumeReferenceReason,
IN OUT AFSDirectoryCB **ParentDirectoryCB,
OUT AFSDirectoryCB **DirectoryCB,
OUT PUNICODE_STRING ComponentName)
AFSObjectInfoCB *pCurrentObject = NULL;
AFSObjectInfoCB *pParentObjectInfo = NULL;
AFSVolumeCB *pCurrentVolume = *VolumeCB;
+ AFSVolumeCB *pTargetVolume = NULL;
BOOLEAN bReleaseCurrentVolume = TRUE;
+ LONG VolumeReferenceReason = *pVolumeReferenceReason;
BOOLEAN bSubstitutedName = FALSE;
LONG lCount;
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Processing full name %wZ\n",
+ "AFSLocateNameEntry (FO: %p) Processing full name %wZ\n",
FileObject,
RootPathName);
while( TRUE)
{
- ASSERT( pCurrentVolume->VolumeReferenceCount > 1);
+ ASSERT( pCurrentVolume->VolumeReferenceCount > 0);
ASSERT( pDirEntry->DirOpenReferenceCount > 0);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Deleted parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Deleted parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Delete pending on %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Delete pending on %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Verifying parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Verifying parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to verify parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to verify parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Evaluating parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Evaluating parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
if ( ntStatus == STATUS_NOT_A_DIRECTORY)
{
- if ( pCurrentObject->ParentObjectInformation == NULL)
+ if ( !BooleanFlagOn( pCurrentObject->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT NULL Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT NULL Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to evaluate object %wZ FID %08lX-%08lX-%08lX-%08lX PARENT %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
pCurrentObject->FileId.Volume,
pCurrentObject->FileId.Vnode,
pCurrentObject->FileId.Unique,
- pCurrentObject->ParentObjectInformation->FileId.Cell,
- pCurrentObject->ParentObjectInformation->FileId.Volume,
- pCurrentObject->ParentObjectInformation->FileId.Vnode,
- pCurrentObject->ParentObjectInformation->FileId.Unique,
+ pCurrentObject->ParentFileId.Cell,
+ pCurrentObject->ParentFileId.Volume,
+ pCurrentObject->ParentFileId.Vnode,
+ pCurrentObject->ParentFileId.Unique,
ntStatus);
}
}
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to evaluate parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to evaluate parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Verifying symlink parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Verifying symlink parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to verify symlink parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to verify symlink parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to retrieve target name for symlink %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to retrieve target name for symlink %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Processing relative symlink target %wZ for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Processing relative symlink target %wZ for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.TargetName,
&pDirEntry->NameInformation.FileName,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Processing absolute symlink target %wZ for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Processing absolute symlink target %wZ for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.TargetName,
&pDirEntry->NameInformation.FileName,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Current volume not global, resetting for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Current volume not global, resetting for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
pCurrentObject->FileId.Vnode,
pCurrentObject->FileId.Unique);
- lCount = InterlockedDecrement( &pCurrentVolume->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pCurrentVolume,
+ VolumeReferenceReason);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry Decrement count on volume %08lX Cnt %d\n",
+ "AFSLocateNameEntry Decrement count on volume %p Reason %u Cnt %d\n",
pCurrentVolume,
+ VolumeReferenceReason,
lCount);
pCurrentVolume = AFSGlobalRoot;
- lCount = InterlockedIncrement( &pCurrentVolume->VolumeReferenceCount);
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_LOCATE_NAME;
+
+ lCount = AFSVolumeIncrement( pCurrentVolume,
+ VolumeReferenceReason);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry Increment count on volume %08lX Cnt %d\n",
+ "AFSLocateNameEntry Increment count on volume %p Reason %u Cnt %d\n",
pCurrentVolume,
+ VolumeReferenceReason,
lCount);
}
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Resetting name array for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Resetting name array for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Building MP target for parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Building MP target for parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
// Also decrement the ref count on the volume
//
- ASSERT( pCurrentVolume->VolumeReferenceCount > 1);
-
- lCount = InterlockedDecrement( &pCurrentVolume->VolumeReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry Decrement2 count on volume %08lX Cnt %d\n",
- pCurrentVolume,
- lCount);
-
ntStatus = AFSBuildMountPointTarget( AuthGroup,
pDirEntry,
- &pCurrentVolume);
+ &pTargetVolume);
if( !NT_SUCCESS( ntStatus))
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to build MP target for parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to build MP target for parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
pCurrentObject->FileId.Unique,
ntStatus);
- //
- // We already decremented the current volume above
- //
-
- bReleaseCurrentVolume = FALSE;
-
try_return( ntStatus);
}
- ASSERT( pCurrentVolume->VolumeReferenceCount > 1);
+ ASSERT( pCurrentVolume->VolumeReferenceCount > 0);
+
+ lCount = AFSVolumeDecrement( pCurrentVolume,
+ VolumeReferenceReason);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSLocateNameEntry Decrement2 count on volume %p Reason %u Cnt %d\n",
+ pCurrentVolume,
+ VolumeReferenceReason,
+ lCount);
+
+ pCurrentVolume = pTargetVolume;
+
+ pTargetVolume = NULL;
+
+ ASSERT( pCurrentVolume->VolumeReferenceCount > 0);
+
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_MOUNTPT;
//
// We want to restart processing here on the new parent ...
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to process DFSLink parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to process DFSLink parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Enumerating parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Enumerating parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to enumerate parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to enumerate parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Encountered file node %wZ FID %08lX-%08lX-%08lX-%08lX in path processing\n",
+ "AFSLocateNameEntry (FO: %p) Encountered file node %wZ FID %08lX-%08lX-%08lX-%08lX in path processing\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Returning file %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Returning file %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Completed processing returning %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Completed processing returning %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Backing up entry from %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Backing up entry from %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Processing @SYS substitution for %wZ Index %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Processing @SYS substitution for %wZ Index %08lX\n",
FileObject,
&uniComponentName,
ulSubstituteIndex);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Located substitution %wZ for %wZ Index %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Located substitution %wZ for %wZ Index %08lX\n",
FileObject,
&uniSearchName,
&uniComponentName,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to locate substitute string for %wZ Index %08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to locate substitute string for %wZ Index %08lX Status %08lX\n",
FileObject,
&uniComponentName,
ulSubstituteIndex,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Searching for entry %wZ case sensitive\n",
+ "AFSLocateNameEntry (FO: %p) Searching for entry %wZ case sensitive\n",
FileObject,
&uniSearchName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Searching for entry %wZ case insensitive\n",
+ "AFSLocateNameEntry (FO: %p) Searching for entry %wZ case insensitive\n",
FileObject,
&uniSearchName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Searching for entry %wZ short name\n",
+ "AFSLocateNameEntry (FO: %p) Searching for entry %wZ short name\n",
FileObject,
&uniSearchName);
{
ntStatus = STATUS_OBJECT_PATH_NOT_FOUND;
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSLocateNameEntry (FO: %p) Returning path not found for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ FileObject,
+ &uniSearchName,
+ pCurrentObject->FileId.Cell,
+ pCurrentObject->FileId.Volume,
+ pCurrentObject->FileId.Vnode,
+ pCurrentObject->FileId.Unique);
}
else
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Returning name not found for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Returning name not found for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&uniSearchName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Verifying(2) parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Verifying(2) parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry->ObjectInformation->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to verify(2) parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to verify(2) parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry->ObjectInformation->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Reprocessing component %wZ in parent %wZ\n",
+ "AFSLocateNameEntry (FO: %p) Reprocessing component %wZ in parent %wZ\n",
FileObject,
&uniSearchName,
&pParentDirEntry->NameInformation.FileName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Deleted entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Deleted entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
// on the entry
//
- pParentObjectInfo = pCurrentObject->ParentObjectInformation;
+ if( BooleanFlagOn( pCurrentObject->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
+ {
+
+ pParentObjectInfo = AFSFindObjectInfo( pCurrentObject->VolumeCB,
+ &pCurrentObject->ParentFileId);
+ }
ASSERT( pParentObjectInfo != NULL);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING|AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry Deleting dir entry %08lX (%08lX) for %wZ\n",
+ "AFSLocateNameEntry Deleting dir entry %p (%p) for %wZ\n",
pDirEntry,
pCurrentObject,
&pDirEntry->NameInformation.FileName);
AFSDbgLogMsg( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry Removing object %08lX from volume tree\n",
+ "AFSLocateNameEntry Removing object %p from volume tree\n",
pCurrentObject);
AFSRemoveHashEntry( &pCurrentObject->VolumeCB->ObjectInfoTree.TreeHead,
AFSReleaseResource( pCurrentObject->VolumeCB->ObjectInfoTree.TreeLock);
+ AFSReleaseObjectInfo( &pParentObjectInfo);
+
//
// We deleted the dir entry so check if there is any remaining portion
// of the name to process.
if( uniRemainingPath.Length > 0)
{
+
ntStatus = STATUS_OBJECT_PATH_NOT_FOUND;
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSLocateNameEntry (FO: %p) Returning path not found(2) for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ FileObject,
+ &uniComponentName,
+ pCurrentObject->FileId.Cell,
+ pCurrentObject->FileId.Volume,
+ pCurrentObject->FileId.Vnode,
+ pCurrentObject->FileId.Unique);
}
else
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Returning name not found(2) for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Returning name not found(2) for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&uniComponentName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSLocateNameEntry (FO: %08lX) Substituting %wZ into %wZ Index %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Substituting %wZ into %wZ Index %08lX\n",
FileObject,
&uniSearchName,
&uniComponentName,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failure to substitute %wZ into %wZ Index %08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failure to substitute %wZ into %wZ Index %08lX Status %08lX\n",
FileObject,
&uniSearchName,
&uniComponentName,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Failed to evaluate possible DFS Link %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Failed to evaluate possible DFS Link %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Inserting name array entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %p) Inserting name array entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry (FO: %08lX) Completed processing %wZ Status %08lX\n",
+ "AFSLocateNameEntry (FO: %p) Completed processing %wZ Status %08lX\n",
FileObject,
RootPathName,
ntStatus);
if( bReleaseCurrentVolume)
{
- ASSERT( pCurrentVolume->VolumeReferenceCount > 1);
+ ASSERT( pCurrentVolume->VolumeReferenceCount > 0);
- lCount = InterlockedDecrement( &pCurrentVolume->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pCurrentVolume,
+ VolumeReferenceReason);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSLocateNameEntry Decrement3 count on volume %08lX Cnt %d\n",
+ "AFSLocateNameEntry Decrement3 count on volume %p Reason %u Cnt %d\n",
pCurrentVolume,
+ VolumeReferenceReason,
lCount);
+
+ bReleaseCurrentVolume = FALSE;
}
if( RootPathName->Buffer != uniFullPathName.Buffer)
AFSExFreePoolWithTag( uniSearchName.Buffer, 0);
}
+
+ if ( bReleaseCurrentVolume) {
+
+ *pVolumeReferenceReason = VolumeReferenceReason;
+ }
}
return ntStatus;
try_return( ntStatus);
}
+ //
+ // If AFSNotifyFileCreate returns pDirNode != NULL, then its
+ // DirOpenReferenceCount is held.
+ //
+
AFSAcquireExcl( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE);
&pExistingDirNode->ObjectInformation->FileId))
{
- AFSDeleteDirEntry( ParentObjectInfo,
- pDirNode);
+ if ( pExistingDirNode != pDirNode)
+ {
- lCount = InterlockedIncrement( &pExistingDirNode->DirOpenReferenceCount);
+ lCount = InterlockedDecrement( &pDirNode->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSCreateDirEntry Increment count on %wZ DE %p Cnt %d\n",
- &pExistingDirNode->NameInformation.FileName,
- pExistingDirNode,
- lCount);
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCreateDirEntry Decrement count on %wZ DE %p Cnt %d\n",
+ &pDirNode->NameInformation.FileName,
+ pDirNode,
+ lCount);
+
+ AFSDeleteDirEntry( ParentObjectInfo,
+ pDirNode);
- *DirEntry = pExistingDirNode;
+ lCount = InterlockedIncrement( &pExistingDirNode->DirOpenReferenceCount);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCreateDirEntry Increment count on %wZ DE %p Cnt %d\n",
+ &pExistingDirNode->NameInformation.FileName,
+ pExistingDirNode,
+ lCount);
+
+ *DirEntry = pExistingDirNode;
+ }
AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
AFSRemoveNameEntry( ParentObjectInfo,
pExistingDirNode);
}
-
}
}
pDirNode,
TRUE);
- lCount = InterlockedIncrement( &pDirNode->DirOpenReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSCreateDirEntry Increment2 count on %wZ DE %p Cnt %d\n",
- &pDirNode->NameInformation.FileName,
- pDirNode,
- lCount);
-
//
// Pass back the dir entry
//
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInsertDirectoryNode Inserting entry %08lX %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSInsertDirectoryNode Inserting entry %p %wZ FID %08lX-%08lX-%08lX-%08lX\n",
DirEntry,
&DirEntry->NameInformation.FileName,
DirEntry->ObjectInformation->FileId.Cell,
return;
}
-NTSTATUS
+void
AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
IN AFSDirectoryCB *DirEntry)
{
- NTSTATUS ntStatus = STATUS_SUCCESS;
LONG lCount;
__Enter
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSDeleteDirEntry Deleting dir entry in parent %08lX Entry %08lX %wZ FID %08lX-%08lX-%08lX-%08lX RefCount %08lX\n",
+ "AFSDeleteDirEntry Deleting dir entry in parent %p Entry %p %wZ FID %08lX-%08lX-%08lX-%08lX RefCount %d\n",
ParentObjectInfo,
DirEntry,
&DirEntry->NameInformation.FileName,
// Dereference the object for this dir entry
//
- ASSERT( DirEntry->ObjectInformation->ObjectReferenceCount > 0);
-
- lCount = AFSObjectInfoDecrement( DirEntry->ObjectInformation);
+ lCount = AFSObjectInfoDecrement( DirEntry->ObjectInformation,
+ AFS_OBJECT_REFERENCE_DIRENTRY);
AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSDeleteDirEntry Decrement count on object %08lX Cnt %d\n",
+ "AFSDeleteDirEntry Decrement count on object %p Cnt %d\n",
DirEntry->ObjectInformation,
lCount);
// 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);
}
-
- return ntStatus;
}
NTSTATUS
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSRemoveDirNodeFromParent Removing DirEntry %08lX %wZ FID %08lX-%08lX-%08lX-%08lX from Parent %08lX\n",
+ "AFSRemoveDirNodeFromParent Removing DirEntry %p %wZ FID %08lX-%08lX-%08lX-%08lX from Parent %p\n",
DirEntry,
&DirEntry->NameInformation.FileName,
DirEntry->ObjectInformation->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSRemoveDirNodeFromParent Removing DirEntry %08lX name %wZ\n",
+ "AFSRemoveDirNodeFromParent Removing DirEntry %p name %wZ\n",
DirEntry,
&DirEntry->NameInformation.FileName);
*ParseFlags = AFS_PARSE_FLAG_ROOT_ACCESS;
+ *ParentDirectoryCB = NULL;
+
if( pIrpSp->FileObject->RelatedFileObject != NULL)
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Relative open for %wZ FID %08lX-%08lX-%08lX-%08lX component %wZ\n",
+ "AFSParseName (%p) Relative open for %wZ FID %08lX-%08lX-%08lX-%08lX component %wZ\n",
Irp,
&pRelatedCcb->DirectoryCB->NameInformation.FileName,
pRelatedCcb->DirectoryCB->ObjectInformation->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Component %wZ contains wild cards\n",
+ "AFSParseName (%p) Component %wZ contains wild cards\n",
Irp,
&uniFullName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Volume %08lX:%08lX OFFLINE/INVALID\n",
+ "AFSParseName (%p) Volume %08lX:%08lX OFFLINE/INVALID\n",
Irp,
pVolumeCB->ObjectInformation.FileId.Cell,
pVolumeCB->ObjectInformation.FileId.Volume);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Verifying root of volume %08lX:%08lX\n",
+ "AFSParseName (%p) Verifying root of volume %08lX:%08lX\n",
Irp,
pVolumeCB->ObjectInformation.FileId.Cell,
pVolumeCB->ObjectInformation.FileId.Volume);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Failed verification of root Status %08lX\n",
+ "AFSParseName (%p) Failed verification of root Status %08lX\n",
Irp,
ntStatus);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Verifying parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSParseName (%p) Verifying parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
Irp,
&pDirEntry->NameInformation.FileName,
pDirEntry->ObjectInformation->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed verification of parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
+ "AFSParseName (%p) Failed verification of parent %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
Irp,
&pDirEntry->NameInformation.FileName,
pDirEntry->ObjectInformation->FileId.Cell,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Failed to allocate full name buffer\n",
+ "AFSParseName (%p) Failed to allocate full name buffer\n",
Irp);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
RtlCopyMemory( &uniFullName.Buffer[ uniFullName.Length/sizeof( WCHAR)],
pIrpSp->FileObject->FileName.Buffer,
- pIr\epSp->FileObject->FileName.Length);
+ pIrpSp->FileObject->FileName.Length);
uniFullName.Length += pIrpSp->FileObject->FileName.Length;
}
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed to initialize name array\n",
+ "AFSParseName (%p) Failed to initialize name array\n",
Irp);
AFSExFreePoolWithTag( uniFullName.Buffer, 0);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed to initialize name array\n",
+ "AFSParseName (%p) Failed to initialize name array\n",
Irp);
AFSExFreePoolWithTag( uniFullName.Buffer, 0);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed to populate name array\n",
+ "AFSParseName (%p) Failed to populate name array\n",
Irp);
AFSExFreePoolWithTag( uniFullName.Buffer, 0);
*NameArray = pNameArray;
- *VolumeCB = pVolumeCB;
-
//
// Increment our volume reference count
//
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_PARSE_NAME);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName Increment count on volume %08lX Cnt %d\n",
+ "AFSParseName Increment count on volume %p Cnt %d\n",
pVolumeCB,
lCount);
- *ParentDirectoryCB = pDirEntry;
-
- lCount = InterlockedIncrement( &pDirEntry->DirOpenReferenceCount);
+ *VolumeCB = pVolumeCB;
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName Increment1 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirEntry->NameInformation.FileName,
- pDirEntry,
- NULL,
- lCount);
+ *ParentDirectoryCB = pDirEntry;
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Returning full name %wZ\n",
+ "AFSParseName (%p) Returning full name %wZ\n",
Irp,
&uniFullName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Name %wZ contains wild cards or too short\n",
+ "AFSParseName (%p) Name %wZ contains wild cards or too short\n",
Irp,
&uniFullName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Name %wZ does not have server name\n",
+ "AFSParseName (%p) Name %wZ does not have server name\n",
Irp,
&pIrpSp->FileObject->FileName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Name %wZ contains invalid drive mapping\n",
+ "AFSParseName (%p) Name %wZ contains invalid drive mapping\n",
Irp,
&pIrpSp->FileObject->FileName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Component %wZ contains wild cards\n",
+ "AFSParseName (%p) Component %wZ contains wild cards\n",
Irp,
&uniFullName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Processing full name %wZ\n",
+ "AFSParseName (%p) Processing full name %wZ\n",
Irp,
&uniFullName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Volume %08lX:%08lX OFFLINE/INVALID\n",
+ "AFSParseName (%p) Volume %08lX:%08lX OFFLINE/INVALID\n",
Irp,
AFSGlobalRoot->ObjectInformation.FileId.Cell,
AFSGlobalRoot->ObjectInformation.FileId.Volume);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Verifying root of volume %08lX:%08lX\n",
+ "AFSParseName (%p) Verifying root of volume %08lX:%08lX\n",
Irp,
AFSGlobalRoot->ObjectInformation.FileId.Cell,
AFSGlobalRoot->ObjectInformation.FileId.Volume);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Failed verification of root Status %08lX\n",
+ "AFSParseName (%p) Failed verification of root Status %08lX\n",
Irp,
ntStatus);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Enumerating global root of volume %08lX:%08lX\n",
+ "AFSParseName (%p) Enumerating global root of volume %08lX:%08lX\n",
Irp,
AFSGlobalRoot->ObjectInformation.FileId.Cell,
AFSGlobalRoot->ObjectInformation.FileId.Volume);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Failed enumeraiton of root Status %08lX\n",
+ "AFSParseName (%p) Failed enumeraiton of root Status %08lX\n",
Irp,
ntStatus);
}
//
- // Check for the \\Server access and return it as though it where \\Server\Globalroot
+ // Check for the \\Server access and return it as though it were \\Server\Globalroot
//
if( uniRemainingPath.Buffer == NULL ||
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Returning global root access\n",
+ "AFSParseName (%p) Returning global root access\n",
Irp);
lCount = InterlockedIncrement( &AFSGlobalRoot->DirectoryCB->DirOpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSParseName (%08lX) Component %wZ contains wild cards\n",
+ "AFSParseName (%p) Component %wZ contains wild cards\n",
Irp,
&uniComponentName);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Returning global root access\n",
+ "AFSParseName (%p) Returning global root access\n",
Irp);
lCount = InterlockedIncrement( &AFSGlobalRoot->DirectoryCB->DirOpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Returning root PIOCtl access\n",
+ "AFSParseName (%p) Returning root PIOCtl access\n",
Irp);
lCount = InterlockedIncrement( &AFSGlobalRoot->DirectoryCB->DirOpenReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
- "AFSParseName (%08lX) Returning root share name %wZ access\n",
+ "AFSParseName (%p) Returning root share name %wZ access\n",
Irp,
&uniComponentName);
*FileName = uniComponentName;
- *ParentDirectoryCB = pDirEntry;
-
ClearFlag( *ParseFlags, AFS_PARSE_FLAG_ROOT_ACCESS);
- lCount = InterlockedIncrement( &pDirEntry->DirOpenReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName Increment5 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirEntry->NameInformation.FileName,
- pDirEntry,
- NULL,
- lCount);
+ *ParentDirectoryCB = pDirEntry;
try_return( ntStatus = STATUS_SUCCESS);
}
ntStatus == STATUS_OBJECT_PATH_NOT_FOUND)
{
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSParseName (%p) AFSCheckCellName %wZ returned path not found; ntStatus %08X\n",
+ Irp,
+ &uniComponentName,
+ STATUS_OBJECT_NAME_NOT_FOUND);
+
ntStatus = STATUS_OBJECT_NAME_NOT_FOUND;
}
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed to initialize name array\n",
+ "AFSParseName (%p) Failed to initialize name array\n",
Irp);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed to insert name array element\n",
+ "AFSParseName (%p) Failed to insert name array element\n",
Irp);
try_return( ntStatus);
//
// This is a root open so pass back no parent
//
-
- *ParentDirectoryCB = NULL;
}
}
else
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName (%08lX) Failed to initialize name array\n",
+ "AFSParseName (%p) Failed to initialize name array\n",
Irp);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
uniRemainingPath.Length += sizeof( WCHAR);
uniRemainingPath.MaximumLength += sizeof( WCHAR);
- lCount = InterlockedIncrement( &pVolumeCB->DirectoryCB->DirOpenReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName Increment6 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pVolumeCB->DirectoryCB->NameInformation.FileName,
- pVolumeCB->DirectoryCB,
- NULL,
- lCount);
-
//
// Pass back the parent being the volume root
//
*ParentDirectoryCB = pVolumeCB->DirectoryCB;
-
}
//
// Increment our reference on the volume
//
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_PARSE_NAME);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName Increment2 count on global volume %08lX Cnt %d\n",
+ "AFSParseName Increment2 count on global volume %p Cnt %d\n",
pVolumeCB,
lCount);
if( *ParentDirectoryCB != NULL)
{
+ lCount = InterlockedIncrement( &(*ParentDirectoryCB)->DirOpenReferenceCount);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSParseName Count on %wZ DE %p Ccb %p Cnt %d\n",
+ "AFSParseName Increment1 count on %wZ DE %p Ccb %p Cnt %d\n",
&(*ParentDirectoryCB)->NameInformation.FileName,
- *ParentDirectoryCB,
+ (*ParentDirectoryCB),
NULL,
- (*ParentDirectoryCB)->DirOpenReferenceCount);
+ lCount);
}
}
if( *VolumeCB != NULL)
{
- ASSERT( (*VolumeCB)->VolumeReferenceCount > 1);
+ ASSERT( (*VolumeCB)->VolumeReferenceCount > 0);
}
if( ntStatus != STATUS_SUCCESS)
&pDirEnumEntry->FileId,
&pVolumeCB);
+ //
+ // On success returns with a volume reference count held
+ //
+
if( !NT_SUCCESS( ntStatus))
{
try_return( ntStatus);
NULL,
lCount);
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_BUILD_ROOT);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCheckCellName Increment count on volume %08lX Cnt %d\n",
+ "AFSCheckCellName Decrement count on volume %p Cnt %d\n",
pVolumeCB,
lCount);
}
AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBuildMountPointTarget Acquiring RDR VolumeTreeLock lock %08lX EXCL %08lX\n",
+ "AFSBuildMountPointTarget Acquiring RDR VolumeTreeLock lock %p EXCL %08lX\n",
&pDevExt->Specific.RDR.VolumeTreeLock,
PsGetCurrentThread());
ntStatus = AFSInitVolume( AuthGroup,
&stTargetFileID,
+ AFS_VOLUME_REFERENCE_MOUNTPT,
&pVolumeCB);
if( !NT_SUCCESS( ntStatus))
// obtain one to match
//
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_MOUNTPT);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBuildMountPointTarget Increment count on volume %08lX Cnt %d\n",
+ "AFSBuildMountPointTarget Increment count on volume %p Cnt %d\n",
pVolumeCB,
lCount);
if( !NT_SUCCESS( ntStatus))
{
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_MOUNTPT);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBuildMountPoint Decrement count on volume %08lX Cnt %d\n",
+ "AFSBuildMountPoint Decrement count on volume %p Cnt %d\n",
pVolumeCB,
lCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBuildRootVolume Acquiring RDR VolumeTreeLock lock %08lX EXCL %08lX\n",
+ "AFSBuildRootVolume Acquiring RDR VolumeTreeLock lock %p EXCL %08lX\n",
&pDevExt->Specific.RDR.VolumeTreeLock,
PsGetCurrentThread());
ntStatus = AFSInitVolume( AuthGroup,
FileId,
+ AFS_VOLUME_REFERENCE_BUILD_ROOT,
&pVolumeCB);
if( !NT_SUCCESS( ntStatus))
// obtain one to match
//
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_BUILD_ROOT);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBuildRootVolume Increment count on volume %08lX Cnt %d\n",
+ "AFSBuildRootVolume Increment count on volume %p Cnt %d\n",
pVolumeCB,
lCount);
if( !NT_SUCCESS( ntStatus))
{
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_BUILD_ROOT);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSBuildRootVolume Decrement count on volume %08lX Cnt %d\n",
+ "AFSBuildRootVolume Decrement count on volume %p Cnt %d\n",
pVolumeCB,
lCount);