/*
* Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
- * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013 Your File System, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
- * notice,
- * this list of conditions and the following disclaimer in the
- * documentation
- * and/or other materials provided with the distribution.
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
* - Neither the names of Kernel Drivers, LLC and Your File System, Inc.
* nor the names of their contributors may be used to endorse or promote
* products derived from this software without specific prior written
Context = ExceptPtrs->ContextRecord;
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"AFSExceptionFilter (Library) - EXR %p CXR %p Function %s Code %08lX Address %p Routine %p\n",
ExceptRec,
FunctionString,
ExceptRec->ExceptionCode,
ExceptRec->ExceptionAddress,
- (void *)AFSExceptionFilter);
+ (void *)AFSExceptionFilter));
DbgPrint("**** Exception Caught in AFS Redirector Library ****\n");
else
{
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"AFSLibExAllocatePoolWithTag failure Type %08lX Size %08lX Tag %08lX %08lX\n",
PoolType,
NumberOfBytes,
Tag,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSBreakPoint();
}
AFSReleaseResource( IN PERESOURCE Resource)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSReleaseResource Releasing lock %p Thread %08lX\n",
Resource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
ExReleaseResourceLite( Resource);
AFSConvertToShared( IN PERESOURCE Resource)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSConvertToShared Converting lock %p Thread %08lX\n",
Resource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
ExConvertExclusiveToSharedLite( Resource);
if( pObjectInfoCB == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSInitializeGlobalDirectory AFSAllocateObjectInfo failure %08lX\n",
- ntStatus);
+ ntStatus));
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeGlobalDirectoryEntries Increment count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
ntStatus = STATUS_SUCCESS;
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_ERROR,
- "AFSInitializeGlobalDirectory AFS_DIR_ENTRY_TAG allocation failure\n");
+ "AFSInitializeGlobalDirectory AFS_DIR_ENTRY_TAG allocation failure\n"));
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeGlobalDirectory AFS_DIR_ENTRY_TAG allocated %p\n",
- pDirNode);
+ pDirNode));
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSInitializeGlobalDirectory AFS_DIR_ENTRY_NP_TAG allocation failure\n");
+ "AFSInitializeGlobalDirectory AFS_DIR_ENTRY_NP_TAG allocation failure\n"));
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
if( pObjectInfoCB == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSInitializeGlobalDirectory AFSAllocateObjectInfo (2) failure %08lX\n",
- ntStatus);
+ ntStatus));
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeGlobalDirectoryEntries Increment count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
ntStatus = STATUS_SUCCESS;
if( pDirNode == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING | AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_ERROR,
- "AFSInitializeGlobalDirectoryEntries AFS_DIR_ENTRY_TAG allocation failure\n");
+ "AFSInitializeGlobalDirectoryEntries AFS_DIR_ENTRY_TAG allocation failure\n"));
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeGlobalDirectoryEntries AFS_DIR_ENTRY_TAG allocated %p\n",
- pDirNode);
+ pDirNode));
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
if( AFSGlobalDotDirEntry != NULL)
{
- AFSDeleteObjectInfo( AFSGlobalDotDirEntry->ObjectInformation);
+ AFSDeleteObjectInfo( &AFSGlobalDotDirEntry->ObjectInformation);
ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
if( AFSGlobalDotDotDirEntry != NULL)
{
- AFSDeleteObjectInfo( AFSGlobalDotDotDirEntry->ObjectInformation);
+ AFSDeleteObjectInfo( &AFSGlobalDotDotDirEntry->ObjectInformation);
ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry Initializing entry %wZ parent FID %08lX-%08lX-%08lX-%08lX\n",
FileName,
ParentObjectInfo->FileId.Cell,
ParentObjectInfo->FileId.Volume,
ParentObjectInfo->FileId.Vnode,
- ParentObjectInfo->FileId.Unique);
+ ParentObjectInfo->FileId.Unique));
//
// First thing is to locate/create our object information block
bAllocatedObjectCB = TRUE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry initialized object %p Parent Object %p for %wZ\n",
pObjectInfoCB,
ParentObjectInfo,
- FileName);
+ FileName));
}
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_DIRENTRY);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry Increment count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
AFSReleaseResource( ParentObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry AFS_DIR_ENTRY_TAG allocated %p\n",
- pDirNode);
+ pDirNode));
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
TRUE);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry Initialized DE %p for %wZ in parent FID %08lX-%08lX-%08lX-%08lX\n",
pDirNode,
ParentObjectInfo->FileId.Cell,
ParentObjectInfo->FileId.Volume,
ParentObjectInfo->FileId.Vnode,
- ParentObjectInfo->FileId.Unique);
+ ParentObjectInfo->FileId.Unique));
if( TargetName != NULL &&
TargetName->Length > 0)
pObjectInfoCB->FileAttributes = DirEnumEntry->FileAttributes;
- if( pObjectInfoCB->FileType == AFS_FILE_TYPE_MOUNTPOINT)
+ if( pObjectInfoCB->FileType == AFS_FILE_TYPE_MOUNTPOINT ||
+ pObjectInfoCB->FileType == AFS_FILE_TYPE_DFSLINK)
{
- pObjectInfoCB->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
+ pObjectInfoCB->FileAttributes |= (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
}
- if (pObjectInfoCB->FileType == AFS_FILE_TYPE_SYMLINK ||
- pObjectInfoCB->FileType == AFS_FILE_TYPE_DFSLINK)
+ if (pObjectInfoCB->FileType == AFS_FILE_TYPE_SYMLINK)
{
- pObjectInfoCB->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ if ( pObjectInfoCB->FileAttributes == FILE_ATTRIBUTE_NORMAL)
+ {
+
+ pObjectInfoCB->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ }
+ else
+ {
+
+ pObjectInfoCB->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT;
+ }
}
pObjectInfoCB->EaSize = DirEnumEntry->EaSize;
if( pDirNode != NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry AFS_DIR_ENTRY_TAG deallocating %p\n",
- pDirNode);
+ pDirNode));
AFSExFreePoolWithTag( pDirNode, AFS_DIR_ENTRY_TAG);
lCount = AFSObjectInfoDecrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_DIRENTRY);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitDirEntry Decrement count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
if( bAllocatedObjectCB)
{
ASSERT( pObjectInfoCB->ObjectReferenceCount == 0);
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
}
}
}
DirEntry->ObjectInformation->FileAttributes = pDirEntry->FileAttributes;
- if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT)
+ if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT ||
+ pDirEntry->FileType == AFS_FILE_TYPE_DFSLINK)
{
- DirEntry->ObjectInformation->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
+ DirEntry->ObjectInformation->FileAttributes |= (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
}
- if( pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK ||
- pDirEntry->FileType == AFS_FILE_TYPE_DFSLINK)
+ if( pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK)
{
- DirEntry->ObjectInformation->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ if ( DirEntry->ObjectInformation->FileAttributes == FILE_ATTRIBUTE_NORMAL)
+ {
+
+ DirEntry->ObjectInformation->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ }
+ else
+ {
+
+ DirEntry->ObjectInformation->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT;
+ }
}
DirEntry->ObjectInformation->EaSize = pDirEntry->EaSize;
pDirEntry->FileType == AFS_FILE_TYPE_INVALID)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSValidateSymLink Invalid type Status %08lX\n",
- STATUS_OBJECT_NAME_NOT_FOUND);
+ STATUS_OBJECT_NAME_NOT_FOUND));
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
DirEntry->ObjectInformation->FileAttributes = pDirEntry->FileAttributes;
- if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT)
+ if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT ||
+ pDirEntry->FileType == AFS_FILE_TYPE_DFSLINK)
{
- DirEntry->ObjectInformation->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
+ DirEntry->ObjectInformation->FileAttributes |= (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
}
- if( pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK ||
- pDirEntry->FileType == AFS_FILE_TYPE_DFSLINK)
+ if( pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK)
{
- DirEntry->ObjectInformation->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ if ( DirEntry->ObjectInformation->FileAttributes == FILE_ATTRIBUTE_NORMAL)
+ {
+
+ DirEntry->ObjectInformation->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ }
+ else
+ {
+
+ DirEntry->ObjectInformation->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT;
+ }
}
DirEntry->ObjectInformation->EaSize = pDirEntry->EaSize;
NTSTATUS ntStatus = STATUS_SUCCESS;
IO_STATUS_BLOCK stIoStatus;
ULONG ulFilter = 0;
+ AFSObjectInfoCB * pParentObjectInfo = NULL;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Invalidation on node type %d for fid %08lX-%08lX-%08lX-%08lX Reason %d\n",
(*ppObjectInfo)->FileType,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
(*ppObjectInfo)->FileId.Unique,
- Reason);
+ Reason));
+
+ if ( BooleanFlagOn( (*ppObjectInfo)->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
+ {
+
+ pParentObjectInfo = AFSFindObjectInfo( (*ppObjectInfo)->VolumeCB,
+ &(*ppObjectInfo)->ParentFileId);
+ }
if( (*ppObjectInfo)->FileType == AFS_FILE_TYPE_SYMLINK ||
(*ppObjectInfo)->FileType == AFS_FILE_TYPE_DFSLINK ||
(*ppObjectInfo)->TargetFileId.Unique = 0;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Setting VERIFY flag on fid %08lX-%08lX-%08lX-%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
- (*ppObjectInfo)->FileId.Unique);
+ (*ppObjectInfo)->FileId.Unique));
SetFlag( (*ppObjectInfo)->Flags, AFS_OBJECT_FLAGS_VERIFY);
}
- ulFilter = FILE_NOTIFY_CHANGE_FILE_NAME;
-
- if( Reason == AFS_INVALIDATE_CREDS)
+ if ( pParentObjectInfo != NULL)
{
- ulFilter |= FILE_NOTIFY_CHANGE_SECURITY;
- }
- if( Reason == AFS_INVALIDATE_DATA_VERSION ||
- Reason == AFS_INVALIDATE_FLUSHED)
- {
- ulFilter |= FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE;
- }
- else
- {
- ulFilter |= FILE_NOTIFY_CHANGE_ATTRIBUTES;
- }
+ ulFilter = FILE_NOTIFY_CHANGE_FILE_NAME;
+
+ if( Reason == AFS_INVALIDATE_CREDS)
+ {
+ ulFilter |= FILE_NOTIFY_CHANGE_SECURITY;
+ }
+
+ if( Reason == AFS_INVALIDATE_DATA_VERSION ||
+ Reason == AFS_INVALIDATE_FLUSHED)
+ {
+ ulFilter |= FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE;
+ }
+ else
+ {
+ ulFilter |= FILE_NOTIFY_CHANGE_ATTRIBUTES;
+ }
- AFSFsRtlNotifyFullReportChange( (*ppObjectInfo)->ParentObjectInformation,
- NULL,
- ulFilter,
- FILE_ACTION_MODIFIED);
+ AFSFsRtlNotifyFullReportChange( pParentObjectInfo,
+ NULL,
+ ulFilter,
+ FILE_ACTION_MODIFIED);
+ }
try_return( ntStatus);
}
SetFlag( (*ppObjectInfo)->Flags, AFS_OBJECT_FLAGS_DELETED);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Set DELETE flag on fid %08lX-%08lX-%08lX-%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
- (*ppObjectInfo)->FileId.Unique);
+ (*ppObjectInfo)->FileId.Unique));
- if( (*ppObjectInfo)->ParentObjectInformation != NULL)
+ if( pParentObjectInfo != NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Set VERIFY flag on parent fid %08lX-%08lX-%08lX-%08lX\n",
- (*ppObjectInfo)->ParentObjectInformation->FileId.Cell,
- (*ppObjectInfo)->ParentObjectInformation->FileId.Volume,
- (*ppObjectInfo)->ParentObjectInformation->FileId.Vnode,
- (*ppObjectInfo)->ParentObjectInformation->FileId.Unique);
+ pParentObjectInfo->FileId.Cell,
+ pParentObjectInfo->FileId.Volume,
+ pParentObjectInfo->FileId.Vnode,
+ pParentObjectInfo->FileId.Unique));
- SetFlag( (*ppObjectInfo)->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
+ SetFlag( pParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
- (*ppObjectInfo)->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+ pParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
- (*ppObjectInfo)->ParentObjectInformation->Expiration.QuadPart = 0;
- }
+ pParentObjectInfo->Expiration.QuadPart = 0;
- if( (*ppObjectInfo)->FileType == AFS_FILE_TYPE_DIRECTORY)
- {
- ulFilter = FILE_NOTIFY_CHANGE_DIR_NAME;
- }
- else
- {
- ulFilter = FILE_NOTIFY_CHANGE_FILE_NAME;
- }
+ if( (*ppObjectInfo)->FileType == AFS_FILE_TYPE_DIRECTORY)
+ {
+ ulFilter = FILE_NOTIFY_CHANGE_DIR_NAME;
+ }
+ else
+ {
+ ulFilter = FILE_NOTIFY_CHANGE_FILE_NAME;
+ }
- AFSFsRtlNotifyFullReportChange( (*ppObjectInfo)->ParentObjectInformation,
- NULL,
- ulFilter,
- FILE_ACTION_REMOVED);
+ AFSFsRtlNotifyFullReportChange( pParentObjectInfo,
+ NULL,
+ ulFilter,
+ FILE_ACTION_REMOVED);
+ }
if( NT_SUCCESS( AFSQueueInvalidateObject( (*ppObjectInfo),
Reason)))
(*ppObjectInfo)->Fcb != NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Flush/purge file fid %08lX-%08lX-%08lX-%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
- (*ppObjectInfo)->FileId.Unique);
+ (*ppObjectInfo)->FileId.Unique));
AFSAcquireExcl( &(*ppObjectInfo)->Fcb->NPFcb->SectionObjectResource,
TRUE);
if( !NT_SUCCESS( stIoStatus.Status))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSInvalidateObject CcFlushCache failure FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX Bytes 0x%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Vnode,
(*ppObjectInfo)->FileId.Unique,
stIoStatus.Status,
- stIoStatus.Information);
+ stIoStatus.Information));
ntStatus = stIoStatus.Status;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSInvalidateObject CcPurgeCacheSection failure FID %08lX-%08lX-%08lX-%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
- (*ppObjectInfo)->FileId.Unique);
+ (*ppObjectInfo)->FileId.Unique));
SetFlag( (*ppObjectInfo)->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSInvalidateObject Cc FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
(*ppObjectInfo)->FileId.Unique,
- ntStatus);
+ ntStatus));
SetFlag( (*ppObjectInfo)->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
if( (*ppObjectInfo)->FileType == AFS_FILE_TYPE_FILE)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Setting VERIFY_DATA flag on fid %08lX-%08lX-%08lX-%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
- (*ppObjectInfo)->FileId.Unique);
+ (*ppObjectInfo)->FileId.Unique));
SetFlag( (*ppObjectInfo)->Flags, AFS_OBJECT_FLAGS_VERIFY_DATA);
}
ulFilter,
FILE_ACTION_MODIFIED);
}
- else
+ else if ( pParentObjectInfo != NULL)
{
- AFSFsRtlNotifyFullReportChange( (*ppObjectInfo)->ParentObjectInformation,
+ AFSFsRtlNotifyFullReportChange( pParentObjectInfo,
NULL,
ulFilter,
FILE_ACTION_MODIFIED);
(*ppObjectInfo)->Expiration.QuadPart = 0;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Setting VERIFY flag on fid %08lX-%08lX-%08lX-%08lX\n",
(*ppObjectInfo)->FileId.Cell,
(*ppObjectInfo)->FileId.Volume,
(*ppObjectInfo)->FileId.Vnode,
- (*ppObjectInfo)->FileId.Unique);
+ (*ppObjectInfo)->FileId.Unique));
SetFlag( (*ppObjectInfo)->Flags, AFS_OBJECT_FLAGS_VERIFY);
try_exit:
+ if ( pParentObjectInfo != NULL)
+ {
+
+ AFSReleaseObjectInfo( &pParentObjectInfo);
+ }
+
return ntStatus;
}
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Invalidation FID %08lX-%08lX-%08lX-%08lX Type %d WholeVolume %d Reason %d\n",
InvalidateCB->FileID.Cell,
InvalidateCB->FileID.Unique,
InvalidateCB->FileType,
InvalidateCB->WholeVolume,
- InvalidateCB->Reason);
+ InvalidateCB->Reason));
//
// Need to locate the Fcb for the directory to purge
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Acquiring RDR VolumeTreeLock lock %p SHARED %08lX\n",
&pDevExt->Specific.RDR.VolumeTreeLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
//
// Starve any exclusive waiters on this paticular call
if( pVolumeCB != NULL)
{
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_INVALIDATE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Increment count on volume %p Cnt %d\n",
pVolumeCB,
- lCount);
+ lCount));
}
AFSReleaseResource( &pDevExt->Specific.RDR.VolumeTreeLock);
pVolumeCB == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSInvalidateCache Invalidation FAILURE Unable to locate volume node FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
InvalidateCB->FileID.Cell,
InvalidateCB->FileID.Volume,
InvalidateCB->FileID.Vnode,
InvalidateCB->FileID.Unique,
- ntStatus);
+ ntStatus));
try_return( ntStatus = STATUS_SUCCESS);
}
lCount = AFSObjectInfoIncrement( pObjectInfo,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Increment count on object %p Cnt %d\n",
pObjectInfo,
- lCount);
+ lCount));
}
AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
pObjectInfo == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Invalidation FAILURE Unable to locate object FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
InvalidateCB->FileID.Cell,
InvalidateCB->FileID.Volume,
InvalidateCB->FileID.Vnode,
InvalidateCB->FileID.Unique,
- ntStatus);
+ ntStatus));
try_return( ntStatus = STATUS_SUCCESS);
}
lCount = AFSObjectInfoDecrement( pObjectInfo,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Decrement count on object %p Cnt %d\n",
pObjectInfo,
- lCount);
+ lCount));
}
if ( pVolumeCB != NULL)
{
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_INVALIDATE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateCache Decrement count on volume %p Cnt %d\n",
pVolumeCB,
- lCount);
+ lCount));
}
}
BOOLEAN bIsChild = FALSE;
AFSFcb *pCurrentFcb = Fcb;
+ AFSObjectInfoCB * pParentObjectInfo = NULL;
while( pCurrentFcb != NULL)
{
- if( pCurrentFcb->ObjectInformation->ParentObjectInformation == Dcb->ObjectInformation)
+ if( BooleanFlagOn( pCurrentFcb->ObjectInformation->Flags, AFS_OBJECT_FLAGS_PARENT_FID) &&
+ AFSIsEqualFID( &pCurrentFcb->ObjectInformation->ParentFileId, &Dcb->ObjectInformation->FileId))
{
bIsChild = TRUE;
break;
}
- pCurrentFcb = pCurrentFcb->ObjectInformation->ParentObjectInformation->Fcb;
+ pParentObjectInfo = AFSFindObjectInfo( pCurrentFcb->ObjectInformation->VolumeCB,
+ &pCurrentFcb->ObjectInformation->ParentFileId);
+
+ if ( pParentObjectInfo != NULL)
+ {
+
+ pCurrentFcb = pParentObjectInfo->Fcb;
+
+ AFSReleaseObjectInfo( &pParentObjectInfo);
+ }
+ else
+ {
+
+ pCurrentFcb = NULL;
+ }
}
return bIsChild;
#endif
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSSubstituteSysName Acquiring SysName lock %p SHARED %08lX\n",
pSysNameLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireShared( pSysNameLock,
TRUE);
if( pSysName == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSSubstituteSysName No sysname %wZ Status %08lX\n",
&ComponentName,
- STATUS_OBJECT_NAME_NOT_FOUND);
+ STATUS_OBJECT_NAME_NOT_FOUND));
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateVolume Invalidate volume fid %08lX-%08lX-%08lX-%08lX Reason %08lX\n",
VolumeCB->ObjectInformation.FileId.Cell,
VolumeCB->ObjectInformation.FileId.Volume,
VolumeCB->ObjectInformation.FileId.Vnode,
VolumeCB->ObjectInformation.FileId.Unique,
- Reason);
+ Reason));
//
// Depending on the reason for invalidation then perform work on the node
lCount = AFSObjectInfoIncrement( pCurrentObject,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateVolumeObjects Increment count on object %p Cnt %d\n",
pCurrentObject,
- lCount);
+ lCount));
AFSInvalidateObject( &pCurrentObject,
Reason);
lCount = AFSObjectInfoDecrement( pCurrentObject,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateVolumeObjects Decrement count on object %p Cnt %d\n",
pCurrentObject,
- lCount);
+ lCount));
}
}
lCount = AFSObjectInfoIncrement( pCurrentObject,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateVolumeObjects Increment count on object %p Cnt %d\n",
pCurrentObject,
- lCount);
+ lCount));
}
while( pCurrentObject != NULL)
lCount = AFSObjectInfoIncrement( pNextObject,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateVolumeObjects Increment count on object %p Cnt %d\n",
pNextObject,
- lCount);
+ lCount));
}
AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock);
lCount = AFSObjectInfoDecrement( pCurrentObject,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateVolumeObjects Decrement count on object %p Cnt %d\n",
pCurrentObject,
- lCount);
+ lCount));
}
AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock,
pRDRDeviceExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateAllVolumes Acquiring RDR VolumeListLock lock %p SHARED %08lX\n",
&pRDRDeviceExt->Specific.RDR.VolumeListLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireShared( &pRDRDeviceExt->Specific.RDR.VolumeListLock,
TRUE);
if ( pVolumeCB)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateAllVolumes Acquiring VolumeRoot ObjectInfoTree lock %p SHARED %08lX\n",
pVolumeCB->ObjectInfoTree.TreeLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_INVALIDATE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateAllVolumes Increment count on volume %p Cnt %d\n",
pVolumeCB,
- lCount);
+ lCount));
}
while( pVolumeCB != NULL)
if ( pNextVolumeCB)
{
- lCount = InterlockedIncrement( &pNextVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pNextVolumeCB,
+ AFS_VOLUME_REFERENCE_INVALIDATE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateAllVolumes Increment count on volume %p Cnt %d\n",
pVolumeCB,
- lCount);
+ lCount));
}
AFSReleaseResource( &pRDRDeviceExt->Specific.RDR.VolumeListLock);
AFSAcquireShared( &pRDRDeviceExt->Specific.RDR.VolumeListLock,
TRUE);
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_INVALIDATE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateAllVolumes Decrement count on volume %p Cnt %d\n",
pVolumeCB,
- lCount);
+ lCount));
pVolumeCB = pNextVolumeCB;
}
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSVerifyEntry Verifying entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
ntStatus = AFSEvaluateTargetByID( pObjectInfo,
AuthGroup,
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSVerifyEntry Evaluate Target failed %wZ FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if ( !BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY_DATA))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry No DV change %I64X for Fcb %wZ FID %08lX-%08lX-%08lX-%08lX\n",
pObjectInfo->DataVersion.QuadPart,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
//
// We are ok, just get out
if ( pObjectInfo->DataVersion.QuadPart != pDirEnumEntry->DataVersion.QuadPart)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry DV Change %wZ FID %08lX-%08lX-%08lX-%08lX (%08lX != %08lX)\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
pObjectInfo->DataVersion.LowPart,
- pDirEnumEntry->DataVersion.LowPart
- );
+ pDirEnumEntry->DataVersion.LowPart));
bPurgeExtents = TRUE;
}
bPurgeExtents = TRUE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Clearing VERIFY_DATA flag %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
ClearFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY_DATA);
}
if( pObjectInfo->Fcb != NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Flush/purge entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
if( !NT_SUCCESS( stIoStatus.Status))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSVerifyEntry CcFlushCache failure %wZ FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX Bytes 0x%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
stIoStatus.Status,
- stIoStatus.Information);
+ stIoStatus.Information));
ntStatus = stIoStatus.Status;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSVerifyEntry CcPurgeCacheSection failure %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
SetFlag( pObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
{
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSVerifyEntry CcFlushCache or CcPurgeCacheSection %wZ FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
SetFlag( pObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
// Reacquire the Fcb to purge the cache
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Acquiring Fcb lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->Resource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->Resource,
TRUE);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSVerifyEntry Meta Data Update failed %wZ FID %08lX-%08lX-%08lX-%08lX ntStatus %08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
break;
}
pObjectInfo->Fcb->Header.FileSize.QuadPart = pObjectInfo->EndOfFile.QuadPart;
pObjectInfo->Fcb->Header.ValidDataLength.QuadPart = pObjectInfo->EndOfFile.QuadPart;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
(PCC_FILE_SIZES)&pObjectInfo->Fcb->Header.AllocationSize);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->SectionObjectResource);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSVerifyEntry Meta Data Update failed %wZ FID %08lX-%08lX-%08lX-%08lX ntStatus %08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
break;
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSVerifyEntry Fcb NULL %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
}
ClearFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
if( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSVerifyEntry Validating directory content for entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
AFSAcquireExcl( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE);
default:
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSVerifyEntry Attempt to verify node of type %d %wZ FID %08lX-%08lX-%08lX-%08lX\n",
pObjectInfo->FileType,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
break;
}
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSSetVolumeState Marking volume state %d Volume Cell %08lX Volume %08lX\n",
VolumeStatus->Online,
VolumeStatus->FileID.Cell,
- VolumeStatus->FileID.Volume);
+ VolumeStatus->FileID.Volume));
//
// Need to locate the Fcb for the directory to purge
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSSetVolumeState Acquiring RDR VolumeTreeLock lock %p SHARED %08lX\n",
&pDevExt->Specific.RDR.VolumeTreeLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireShared( &pDevExt->Specific.RDR.VolumeTreeLock, TRUE);
if( pVolumeCB != NULL)
{
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ AFS_VOLUME_REFERENCE_INVALIDATE);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSSetVolumeState Increment count on volume %p Cnt %d\n",
pVolumeCB,
- lCount);
+ lCount));
AFSReleaseResource( &pDevExt->Specific.RDR.VolumeTreeLock);
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Validating content for FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
if( !ExIsResourceAcquiredLite( ObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Acquiring DirectoryNodeHdr.TreeLock lock %p EXCL %08lX\n",
ObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( ObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE);
ObjectInfo->Specific.Directory.DirectoryNodeCount > 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSValidateDirectoryCache Empty Node List but Non-Zero Node Count %d for dir FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->Specific.Directory.DirectoryNodeCount,
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
}
//
//
if( BooleanFlagOn( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_DELETED) &&
- pCurrentDirEntry->DirOpenReferenceCount <= 0)
+ pCurrentDirEntry->DirOpenReferenceCount <= 0 &&
+ pCurrentDirEntry->NameArrayReferenceCount <= 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Deleting dir entry %p name %wZ\n",
pCurrentDirEntry,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
AFSDeleteDirEntry( ObjectInfo,
pCurrentDirEntry);
ClearFlag( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_VALID);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Clear VALID flag on DE %p Reference count %d\n",
pCurrentDirEntry,
- pCurrentDirEntry->DirOpenReferenceCount);
+ pCurrentDirEntry->DirOpenReferenceCount));
//
// We pull the short name from the parent tree since it could change below
if( BooleanFlagOn( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_INSERTED_SHORT_NAME))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Removing DE %p (%08lX) from shortname tree for %wZ\n",
pCurrentDirEntry,
pCurrentDirEntry->Type.Data.ShortNameTreeEntry.HashIndex,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
AFSRemoveShortNameDirEntry( &ObjectInfo->Specific.Directory.ShortNameTree,
pCurrentDirEntry);
ObjectInfo->Specific.Directory.ShortNameTree = pCurrentDirEntry;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Insert DE %p to head of shortname tree for %wZ\n",
pCurrentDirEntry,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
SetFlag( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_INSERTED_SHORT_NAME);
}
if( !NT_SUCCESS( AFSInsertShortNameDirEntry( ObjectInfo->Specific.Directory.ShortNameTree,
pCurrentDirEntry)))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Failed to insert DE %p (%08lX) to shortname tree for %wZ\n",
pCurrentDirEntry,
pCurrentDirEntry->Type.Data.ShortNameTreeEntry.HashIndex,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
}
else
{
SetFlag( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_INSERTED_SHORT_NAME);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Insert DE %p to shortname tree for %wZ\n",
pCurrentDirEntry,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
}
}
}
continue;
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Processing INVALID DE %p Reference count %d\n",
pCurrentDirEntry,
- pCurrentDirEntry->DirOpenReferenceCount);
+ pCurrentDirEntry->DirOpenReferenceCount));
- if( pCurrentDirEntry->DirOpenReferenceCount <= 0)
+ if( pCurrentDirEntry->DirOpenReferenceCount <= 0 &&
+ pCurrentDirEntry->NameArrayReferenceCount <= 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Deleting dir entry %wZ from parent FID %08lX-%08lX-%08lX-%08lX\n",
&pCurrentDirEntry->NameInformation.FileName,
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
AFSDeleteDirEntry( ObjectInfo,
pCurrentDirEntry);
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateDirectoryCache Setting dir entry %p Name %wZ DELETED in parent FID %08lX-%08lX-%08lX-%08lX\n",
pCurrentDirEntry,
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
SetFlag( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_DELETED);
pObjectInfo->FileAttributes = DirEnumEntry->FileAttributes;
- if( pObjectInfo->FileType == AFS_FILE_TYPE_MOUNTPOINT)
+ if( pObjectInfo->FileType == AFS_FILE_TYPE_MOUNTPOINT ||
+ pObjectInfo->FileType == AFS_FILE_TYPE_DFSLINK)
{
- pObjectInfo->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
+ pObjectInfo->FileAttributes |= (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
}
- if( pObjectInfo->FileType == AFS_FILE_TYPE_SYMLINK ||
- pObjectInfo->FileType == AFS_FILE_TYPE_DFSLINK)
+ if( pObjectInfo->FileType == AFS_FILE_TYPE_SYMLINK)
{
- pObjectInfo->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ if ( pObjectInfo->FileAttributes == FILE_ATTRIBUTE_NORMAL)
+ {
+
+ pObjectInfo->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT;
+ }
+ else
+ {
+
+ pObjectInfo->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT;
+ }
}
pObjectInfo->EaSize = DirEnumEntry->EaSize;
// correct order
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSValidateEntry Validating entry %wZ FID %08lX-%08lX-%08lX-%08lX FastCall %u\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- FastCall);
+ FastCall));
//
// If this is a fake node then bail since the service knows nothing about it
pObjectInfo->Expiration.QuadPart >= liSystemTime.QuadPart)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSValidateEntry Directory entry %wZ FID %08lX-%08lX-%08lX-%08lX VALID\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSValidateEntry Failed to evaluate entry FastCall %d %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
FastCall,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
//
// Failed validation of node so return access-denied
try_return( ntStatus);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Validating entry FastCall %d %wZ FID %08lX-%08lX-%08lX-%08lX DV %I64X returned DV %I64X FT %d\n",
FastCall,
pObjectInfo->FileId.Unique,
pObjectInfo->DataVersion.QuadPart,
pDirEnumEntry->DataVersion.QuadPart,
- pDirEnumEntry->FileType);
+ pDirEnumEntry->FileType));
//
if( !ExIsResourceAcquiredLite( &pCurrentFcb->NPFcb->Resource))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Acquiring Fcb lock %p EXCL %08lX\n",
&pCurrentFcb->NPFcb->Resource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pCurrentFcb->NPFcb->Resource,
TRUE);
IO_STATUS_BLOCK stIoStatus;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSValidateEntry Flush/purge entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
if ( pObjectInfo->DataVersion.QuadPart != pDirEnumEntry->DataVersion.QuadPart)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry DV Change %wZ FID %08lX-%08lX-%08lX-%08lX (%08lX != %08lX)\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
pObjectInfo->DataVersion.LowPart,
- pDirEnumEntry->DataVersion.LowPart
- );
+ pDirEnumEntry->DataVersion.LowPart));
bPurgeExtents = TRUE;
}
{
bPurgeExtents = TRUE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Clearing VERIFY_DATA flag %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
ClearFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY_DATA);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
if( !NT_SUCCESS( stIoStatus.Status))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSValidateEntry CcFlushCache failure %wZ FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX Bytes 0x%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
stIoStatus.Status,
- stIoStatus.Information);
+ stIoStatus.Information));
ntStatus = stIoStatus.Status;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSValidateEntry CcPurgeCacheSection failure %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
SetFlag( pObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
{
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSValidateEntry CcFlushCache or CcPurgeCacheSection %wZ FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
SetFlag( pObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->SectionObjectResource);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSValidateEntry Meta Data Update failed %wZ FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
break;
}
{
FILE_OBJECT *pCCFileObject;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
(PCC_FILE_SIZES)&pObjectInfo->Fcb->Header.AllocationSize);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&pObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->SectionObjectResource);
}
// the directory enumeration.
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Acquiring DirectoryNodeHdr.TreeLock lock %p EXCL %08lX\n",
pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
if( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSValidateEntry Validating directory content for %wZ FID %08lX-%08lX-%08lX-%08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
AFSAcquireExcl( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSValidateEntry Failed to re-enumerate %wZ FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
&DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
break;
}
default:
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSValidateEntry Attempt to verify node of type %d FastCall %d %wZ FID %08lX-%08lX-%08lX-%08lX\n",
pObjectInfo->FileType,
pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode,
- pObjectInfo->FileId.Unique);
+ pObjectInfo->FileId.Unique));
break;
}
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeSpecialShareNameList (srvsvc) Increment count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
pObjectInfoCB->FileType = (ULONG) AFS_FILE_TYPE_SPECIAL_SHARE_NAME;
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeSpecialShareNameList (srvsvc) AFS_DIR_ENTRY_TAG allocated %p\n",
- pDirNode);
+ pDirNode));
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeSpecialShareNameList (ipc$) Incrementing count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
pObjectInfoCB->FileType = (ULONG) AFS_FILE_TYPE_SPECIAL_SHARE_NAME;
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeSpecialShareNameList (ipc$) AFS_DIR_ENTRY_TAG allocated %p\n",
- pDirNode);
+ pDirNode));
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSLibExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
ExFreePool( pDirNode);
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
pLastDirNode = (AFSDirectoryCB *)pDirNode->ListEntry.fLink;
- AFSDeleteObjectInfo( pDirNode->ObjectInformation);
+ AFSDeleteObjectInfo( &pDirNode->ObjectInformation);
ExDeleteResourceLite( &pDirNode->NonPaged->Lock);
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSGetSpecialShareNameEntry share name %wZ secondary name %wZ\n",
ShareName,
- SecondaryName);
+ SecondaryName));
uniFullShareName = *ShareName;
pNextDirEntry = (AFSDirectoryCB *)pCurrentDirEntry->ListEntry.fLink;
- if( pCurrentDirEntry->DirOpenReferenceCount <= 0)
+ if( pCurrentDirEntry->DirOpenReferenceCount <= 0 &&
+ pCurrentDirEntry->NameArrayReferenceCount <= 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetDirectoryContent Deleting dir entry %p for %wZ\n",
pCurrentDirEntry,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
AFSDeleteDirEntry( ObjectInfoCB,
pCurrentDirEntry);
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetDirectoryContent Setting DELETE flag in dir entry %p for %wZ\n",
pCurrentDirEntry,
- &pCurrentDirEntry->NameInformation.FileName);
+ &pCurrentDirEntry->NameInformation.FileName));
SetFlag( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_DELETED);
ObjectInfoCB->Specific.Directory.DirectoryNodeCount = 0;
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIR_NODE_COUNT,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIR_NODE_COUNT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetDirectoryContent Reset count to 0 on parent FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfoCB->FileId.Cell,
ObjectInfoCB->FileId.Volume,
ObjectInfoCB->FileId.Vnode,
- ObjectInfoCB->FileId.Unique);
+ ObjectInfoCB->FileId.Unique));
}
return ntStatus;
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSEnumerateGlobalRoot Acquiring GlobalRoot DirectoryNodeHdr.TreeLock lock %p EXCL %08lX\n",
AFSGlobalRoot->ObjectInformation.Specific.Directory.DirectoryNodeHdr.TreeLock,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( AFSGlobalRoot->ObjectInformation.Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE);
pDirGlobalDirNode = AFSGlobalRoot->ObjectInformation.Specific.Directory.DirectoryNodeListHead;
- //
- // Indicate the node is initialized
- //
-
- SetFlag( AFSGlobalRoot->ObjectInformation.Flags, AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED);
-
uniFullName.MaximumLength = PAGE_SIZE;
uniFullName.Length = 0;
if( pNameArray == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSInitNameArray Failed to allocate name array\n");
+ "AFSInitNameArray Failed to allocate name array\n"));
try_return( pNameArray);
}
lCount = InterlockedIncrement( &DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitNameArray [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
pNameArray,
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
- lCount);
+ lCount));
pCurrentElement->DirectoryCB = DirectoryCB;
SetFlag( pCurrentElement->Flags, AFS_NAME_ARRAY_FLAG_ROOT_ELEMENT);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitNameArray [NA:%p] Element[0] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
pNameArray,
pCurrentElement->FileId.Vnode,
pCurrentElement->FileId.Unique,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
- pCurrentElement->DirectoryCB->ObjectInformation->FileType);
+ pCurrentElement->DirectoryCB->ObjectInformation->FileType));
}
try_exit:
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArray [NA:%p] passed Path %wZ DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
DirectoryCB->ObjectInformation->FileId.Vnode,
DirectoryCB->ObjectInformation->FileId.Unique,
&DirectoryCB->NameInformation.FileName,
- DirectoryCB->ObjectInformation->FileType);
+ DirectoryCB->ObjectInformation->FileType));
//
// Init some info in the header
lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArray [NA:%p] Increment count on volume %wZ DE %p Cnt %d\n",
NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- lCount);
+ lCount));
pCurrentElement->Component = DirectoryCB->ObjectInformation->VolumeCB->DirectoryCB->NameInformation.FileName;
NameArray->LinkCount = 0;
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArray [NA:%p] Element[0] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
pCurrentElement->FileId.Vnode,
pCurrentElement->FileId.Unique,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
- pCurrentElement->DirectoryCB->ObjectInformation->FileType);
+ pCurrentElement->DirectoryCB->ObjectInformation->FileType));
//
// If the root is the parent then we are done ...
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSPopulateNameArray [NA:%p] passed RelatedNameArray %p DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
- NameArray,
- RelatedNameArray,
- DirectoryCB,
- DirectoryCB->ObjectInformation->FileId.Cell,
- DirectoryCB->ObjectInformation->FileId.Volume,
- DirectoryCB->ObjectInformation->FileId.Vnode,
- DirectoryCB->ObjectInformation->FileId.Unique,
- &DirectoryCB->NameInformation.FileName,
- DirectoryCB->ObjectInformation->FileType);
+ if ( DirectoryCB)
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSPopulateNameArray [NA:%p] passed RelatedNameArray %p DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
+ NameArray,
+ RelatedNameArray,
+ DirectoryCB,
+ DirectoryCB->ObjectInformation->FileId.Cell,
+ DirectoryCB->ObjectInformation->FileId.Volume,
+ DirectoryCB->ObjectInformation->FileId.Vnode,
+ DirectoryCB->ObjectInformation->FileId.Unique,
+ &DirectoryCB->NameInformation.FileName,
+ DirectoryCB->ObjectInformation->FileType));
+ }
+ else
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSPopulateNameArray [NA:%p] passed RelatedNameArray %p DE NULL\n",
+ NameArray,
+ RelatedNameArray));
+ }
//
// Init some info in the header
lCount = InterlockedIncrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArrayFromRelatedArray [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- lCount);
+ lCount));
lCount = InterlockedIncrement( &NameArray->Count);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPopulateNameArrayFromRelatedArray [NA:%p] Element[%d] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
pCurrentElement->FileId.Vnode,
pCurrentElement->FileId.Unique,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
- pCurrentElement->DirectoryCB->ObjectInformation->FileType);
+ pCurrentElement->DirectoryCB->ObjectInformation->FileType));
if( pCurrentElement->DirectoryCB == DirectoryCB ||
NameArray->Count == RelatedNameArray->Count)
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSFreeNameArray [NA:%p]\n",
- NameArray);
+ NameArray));
for ( lElement = 0; lElement < NameArray->Count; lElement++)
{
lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSFreeNameArray [NA:%p] Decrement count on %wZ DE %p Cnt %d\n",
NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
}
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInsertNextElement [NA:%p] passed DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
DirectoryCB->ObjectInformation->FileId.Vnode,
DirectoryCB->ObjectInformation->FileId.Unique,
&DirectoryCB->NameInformation.FileName,
- DirectoryCB->ObjectInformation->FileType);
+ DirectoryCB->ObjectInformation->FileType));
if( NameArray->Count == (LONG) NameArray->MaxElementCount)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSInsertNextElement [NA:%p] Name has reached Maximum Size\n",
- NameArray);
+ NameArray));
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
&DirectoryCB->ObjectInformation->FileId) )
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSInsertNextElement [NA:%p] DE %p recursion Status %08X\n",
NameArray,
DirectoryCB,
- STATUS_ACCESS_DENIED);
+ STATUS_ACCESS_DENIED));
try_return( ntStatus = STATUS_ACCESS_DENIED);
}
lCount = InterlockedIncrement( &DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInsertNextElement [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
NameArray,
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
- lCount);
+ lCount));
ASSERT( lCount > 0);
SetFlag( pCurrentElement->Flags, AFS_NAME_ARRAY_FLAG_ROOT_ELEMENT);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInsertNextElement [NA:%p] Element[%d] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
pCurrentElement->FileId.Vnode,
pCurrentElement->FileId.Unique,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
- pCurrentElement->DirectoryCB->ObjectInformation->FileType);
+ pCurrentElement->DirectoryCB->ObjectInformation->FileType));
try_exit:
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSBackupEntry [NA:%p]\n",
- NameArray);
+ NameArray));
if( NameArray->Count == 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSBackupEntry [NA:%p] No more entries\n",
- NameArray);
+ NameArray));
try_return( pCurrentElement);
}
lCount = InterlockedDecrement( &NameArray->CurrentEntry->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSBackupEntry [NA:%p] Decrement count on %wZ DE %p Cnt %d\n",
NameArray,
&NameArray->CurrentEntry->DirectoryCB->NameInformation.FileName,
NameArray->CurrentEntry->DirectoryCB,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
{
NameArray->CurrentEntry = NULL;
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSBackupEntry [NA:%p] No more entries\n",
- NameArray);
+ NameArray));
}
else
{
pDirectoryCB = pCurrentElement->DirectoryCB;
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSBackupEntry [NA:%p] Returning Element[%d] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
pCurrentElement->FileId.Vnode,
pCurrentElement->FileId.Unique,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
- pCurrentElement->DirectoryCB->ObjectInformation->FileType);
+ pCurrentElement->DirectoryCB->ObjectInformation->FileType));
//
// If the entry we are removing is a volume root,
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetParentEntry [NA:%p]\n",
- NameArray);
+ NameArray));
if( NameArray->Count == 0 ||
NameArray->Count == 1)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSGetParentEntry [NA:%p] No more entries\n",
- NameArray);
+ NameArray));
try_return( pDirEntry = NULL);
}
pDirEntry = pElement->DirectoryCB;
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetParentEntry [NA:%p] Returning Element[%d] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
pElement->FileId.Vnode,
pElement->FileId.Unique,
&pElement->DirectoryCB->NameInformation.FileName,
- pElement->DirectoryCB->ObjectInformation->FileType);
+ pElement->DirectoryCB->ObjectInformation->FileType));
try_exit:
__Enter
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetNameArray [NA:%p] passed DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
DirectoryCB->ObjectInformation->FileId.Vnode,
DirectoryCB->ObjectInformation->FileId.Unique,
&DirectoryCB->NameInformation.FileName,
- DirectoryCB->ObjectInformation->FileType);
+ DirectoryCB->ObjectInformation->FileType));
+
//
// Dereference previous name array contents
//
lCount = InterlockedDecrement( &pCurrentElement->DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetNameArray [NA:%p] Decrement count on %wZ DE %p Cnt %d\n",
NameArray,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
pCurrentElement->DirectoryCB,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
}
lCount = InterlockedIncrement( &DirectoryCB->NameArrayReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetNameArray [NA:%p] Increment count on %wZ DE %p Cnt %d\n",
NameArray,
&DirectoryCB->NameInformation.FileName,
DirectoryCB,
- lCount);
+ lCount));
pCurrentElement->DirectoryCB = DirectoryCB;
SetFlag( pCurrentElement->Flags, AFS_NAME_ARRAY_FLAG_ROOT_ELEMENT);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSResetNameArray [NA:%p] Element[0] DE %p FID %08lX-%08lX-%08lX-%08lX %wZ Type %d\n",
NameArray,
pCurrentElement->FileId.Vnode,
pCurrentElement->FileId.Unique,
&pCurrentElement->DirectoryCB->NameInformation.FileName,
- pCurrentElement->DirectoryCB->ObjectInformation->FileType);
+ pCurrentElement->DirectoryCB->ObjectInformation->FileType));
}
}
}
NTSTATUS
-AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo)
+AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ParentObjectInfo)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
__Enter
{
- pObjectInfoCB = AFSAllocateObjectInfo( ObjectInfo,
+ pObjectInfoCB = AFSAllocateObjectInfo( ParentObjectInfo,
0);
if( pObjectInfoCB == NULL)
lCount = AFSObjectInfoIncrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_DIRENTRY);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitPIOCtlDirectoryCB Increment count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
pObjectInfoCB->FileType = (ULONG) AFS_FILE_TYPE_PIOCTL;
if( pDirNode == NULL)
{
- AFSDeleteObjectInfo( pObjectInfoCB);
-
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitPIOCtlDirectoryCB AFS_DIR_ENTRY_TAG allocated %p\n",
- pDirNode);
+ pDirNode));
pNonPagedDirEntry = (AFSNonPagedDirectoryCB *)AFSExAllocatePoolWithTag( NonPagedPool,
sizeof( AFSNonPagedDirectoryCB),
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,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSInitPIOCtlDirectoryCB Raced PIOCtlDirectoryCB %p pFcb %p\n",
- ObjectInfo->Specific.Directory.PIOCtlDirectoryCB,
- pDirNode);
-
- //
- // Increment the open reference and handle on the node
- //
-
- lCount = AFSObjectInfoIncrement( pDirNode->ObjectInformation,
- AFS_OBJECT_REFERENCE_DIRENTRY);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_FCB_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitPIOCtlDirectoryCB Increment count on Object %p Cnt %d\n",
- pDirNode->ObjectInformation,
- lCount);
+ ParentObjectInfo->Specific.Directory.PIOCtlDirectoryCB,
+ pDirNode));
try_return( ntStatus = STATUS_REPARSE);
}
if ( pDirNode != NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_ALLOCATION,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitPIOCtlDirectoryCB AFS_DIR_ENTRY_TAG deallocating %p\n",
- pDirNode);
+ pDirNode));
AFSExFreePoolWithTag( pDirNode, AFS_DIR_ENTRY_TAG);
}
lCount = AFSObjectInfoDecrement( pObjectInfoCB,
AFS_OBJECT_REFERENCE_DIRENTRY);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitPIOCtlDirectoryCB Decrement count on object %p Cnt %d\n",
pObjectInfoCB,
- lCount);
+ lCount));
- AFSDeleteObjectInfo( pObjectInfoCB);
+ AFSDeleteObjectInfo( &pObjectInfoCB);
}
}
}
UNICODE_STRING uniFullPathName = {0};
AFSNameArrayHdr *pNameArray = NULL;
AFSVolumeCB *pVolumeCB = NULL;
+ LONG VolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ AFSVolumeCB *pNewVolumeCB = NULL;
+ LONG NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
AFSDirectoryCB *pDirectoryEntry = NULL, *pParentDirEntry = NULL;
+ AFSDirectoryCB *pNewParentDirEntry = NULL;
WCHAR *pwchBuffer = NULL;
UNICODE_STRING uniComponentName, uniRemainingPath, uniParsedName;
ULONG ulNameDifference = 0;
AFSReleaseResource( &DirectoryCB->NonPaged->Lock);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSRetrieveFileAttributes Name %wZ contains invalid server name\n",
- &uniFullPathName);
+ &uniFullPathName));
try_return( ntStatus = STATUS_OBJECT_PATH_INVALID);
}
// Increment the ref count on the volume and dir entry for correct processing below
//
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_FILE_ATTRS;
+
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ VolumeReferenceReason);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSRetrieveFileAttributes Increment count on volume %p Cnt %d\n",
+ "AFSRetrieveFileAttributes Increment count on volume %p Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
lCount = InterlockedIncrement( &pParentDirEntry->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRetrieveFileAttributes Increment count on %wZ DE %p Ccb %p Cnt %d\n",
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- lCount);
+ lCount));
ntStatus = AFSLocateNameEntry( NULL,
NULL,
&uniParsedName,
pNameArray,
AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL,
- &pVolumeCB,
- &pParentDirEntry,
+ pVolumeCB,
+ pParentDirEntry,
+ &pNewVolumeCB,
+ &NewVolumeReferenceReason,
+ &pNewParentDirEntry,
&pDirectoryEntry,
NULL);
- if( !NT_SUCCESS( ntStatus) ||
- ntStatus == STATUS_REPARSE)
+ if ( pNewVolumeCB != NULL)
{
-
//
- // The volume lock was released on failure or reparse above
- // Except for STATUS_OBJECT_NAME_NOT_FOUND
+ // AFSLocateNameEntry returns pNewVolumeCB with a reference held
+ // even if pVolumeCB == pNewVolumeCB. It is always safe to release
+ // the reference on pVolumeCB that was held prior to the call.
+ // If pVolumeCB == pNewVolumeCB, the reference from AFSLocateNameEntry
+ // will be released second.
//
- if( ntStatus == STATUS_OBJECT_NAME_NOT_FOUND)
- {
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- if( pVolumeCB != NULL)
- {
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSRetrieveFileAttributes Decrement count on volume %p Reason %u Cnt %d\n",
+ pVolumeCB,
+ VolumeReferenceReason,
+ lCount));
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ pVolumeCB = pNewVolumeCB;
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSRetrieveFileAttributes Decrement count on volume %p Cnt %d\n",
- pVolumeCB,
- lCount);
- }
+ pNewVolumeCB = NULL;
- if( pDirectoryEntry != NULL)
- {
+ VolumeReferenceReason = NewVolumeReferenceReason;
- lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
+ NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ }
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSRetrieveFileAttributes Decrement1 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirectoryEntry->NameInformation.FileName,
- pDirectoryEntry,
- NULL,
- lCount);
+ //
+ // AFSLocateNameEntry does not alter the reference count of
+ // pParentDirectoryCB and it returns pNewParentDirectoryCB with
+ // a reference held.
+ //
- ASSERT( lCount >= 0);
- }
- else
- {
+ lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
- lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSRetrieveFileAttributes DecrementX count on %wZ DE %p Cnt %d\n",
+ &pParentDirEntry->NameInformation.FileName,
+ pParentDirEntry,
+ lCount));
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSRetrieveFileAttributes Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pParentDirEntry->NameInformation.FileName,
- pParentDirEntry,
- NULL,
- lCount);
+ pParentDirEntry = pNewParentDirEntry;
- ASSERT( lCount >= 0);
- }
- }
+ pNewParentDirEntry = NULL;
- pVolumeCB = NULL;
+ if( !NT_SUCCESS( ntStatus) ||
+ ntStatus == STATUS_REPARSE)
+ {
try_return( ntStatus);
}
// Check for the mount point being returned
//
- if( pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_MOUNTPOINT)
+ if( pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_MOUNTPOINT ||
+ pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_DFSLINK)
{
- FileInfo->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
+ FileInfo->FileAttributes |= (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT);
}
- else if( pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK ||
- pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_DFSLINK)
+ else if( pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK)
{
if ( FileInfo->FileAttributes == FILE_ATTRIBUTE_NORMAL)
FileInfo->ChangeTime = pDirectoryEntry->ObjectInformation->ChangeTime;
- //
- // Remove the reference made above
- //
+try_exit:
- lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
+ if( pDirEntry != NULL)
+ {
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSRetrieveFileAttributes Decrement3 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirectoryEntry->NameInformation.FileName,
- pDirectoryEntry,
- NULL,
- lCount);
+ AFSExFreePoolWithTag( pDirEntry, AFS_GENERIC_MEMORY_2_TAG);
+ }
- ASSERT( lCount >= 0);
+ if( pDirectoryEntry != NULL)
+ {
-try_exit:
+ lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
- if( pDirEntry != NULL)
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSRetrieveFileAttributes Decrement1 count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pDirectoryEntry->NameInformation.FileName,
+ pDirectoryEntry,
+ NULL,
+ lCount));
+
+ ASSERT( lCount >= 0);
+ }
+
+ if ( pParentDirEntry != NULL)
{
- AFSExFreePoolWithTag( pDirEntry, AFS_GENERIC_MEMORY_2_TAG);
+ lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSRetrieveFileAttributes Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pParentDirEntry->NameInformation.FileName,
+ pParentDirEntry,
+ NULL,
+ lCount));
+
+ ASSERT( lCount >= 0);
}
if( pVolumeCB != NULL)
{
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSRetrieveFileAttributes Decrement2 count on volume %p Cnt %d\n",
+ "AFSRetrieveFileAttributes Decrement2 count on volume %p Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
}
if( pNameArray != NULL)
pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock = &pObjectInfo->NonPagedInfo->DirectoryNodeHdrLock;
- pObjectInfo->VolumeCB = ParentObjectInfo->VolumeCB;
-
- pObjectInfo->ParentObjectInformation = ParentObjectInfo;
-
if( ParentObjectInfo != NULL)
{
+ pObjectInfo->VolumeCB = ParentObjectInfo->VolumeCB;
+
+ pObjectInfo->ParentFileId = ParentObjectInfo->FileId;
+
+ SetFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID);
+
lCount = AFSObjectInfoIncrement( ParentObjectInfo,
AFS_OBJECT_REFERENCE_CHILD);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSAllocateObjectInfo Increment count on parent object %p Cnt %d\n",
ParentObjectInfo,
- lCount);
+ lCount));
}
//
if( HashIndex != 0)
{
+ ASSERT( ParentObjectInfo);
+
//
// Insert the entry into the object tree and list
//
IN LONG Reason)
{
- LONG lCount;
+ LONG lCount, lCount2;
AFSAcquireShared( &ObjectInfo->NonPagedInfo->ObjectInfoLock,
TRUE);
lCount = InterlockedDecrement( &ObjectInfo->ObjectReferenceCount);
}
- lCount = InterlockedDecrement( &ObjectInfo->ObjectReferences[ Reason]);
+ lCount2 = InterlockedDecrement( &ObjectInfo->ObjectReferences[ Reason]);
- ASSERT( lCount >= 0);
+ ASSERT( lCount2 >= 0);
AFSReleaseResource( &ObjectInfo->NonPagedInfo->ObjectInfoLock);
return lCount;
}
+AFSObjectInfoCB *
+AFSFindObjectInfo( IN AFSVolumeCB *VolumeCB,
+ IN AFSFileID *FileId)
+{
+ DWORD ntStatus = STATUS_SUCCESS;
+ ULONGLONG ullIndex;
+ AFSObjectInfoCB *pObjectInfo = NULL;
+ LONG lCount;
+
+ if ( AFSIsEqualFID( &VolumeCB->ObjectInformation.FileId, FileId))
+ {
+
+ pObjectInfo = &VolumeCB->ObjectInformation;
+ }
+ else
+ {
+
+ AFSAcquireExcl( VolumeCB->ObjectInfoTree.TreeLock,
+ TRUE);
+
+ ullIndex = AFSCreateLowIndex( FileId);
+
+ ntStatus = AFSLocateHashEntry( VolumeCB->ObjectInfoTree.TreeHead,
+ ullIndex,
+ (AFSBTreeEntry **)&pObjectInfo);
+
+ AFSReleaseResource( VolumeCB->ObjectInfoTree.TreeLock);
+ }
+
+ if ( NT_SUCCESS( ntStatus)) {
+
+ lCount = AFSObjectInfoIncrement( pObjectInfo,
+ AFS_OBJECT_REFERENCE_FIND);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSFindObjectInfo Decrement count on object %p Cnt %d\n",
+ pObjectInfo,
+ lCount));
+ }
+
+ return pObjectInfo;
+}
+
+void
+AFSReleaseObjectInfo( IN AFSObjectInfoCB **ppObjectInfo)
+{
+ LONG lCount;
+
+ lCount = AFSObjectInfoDecrement( *ppObjectInfo,
+ AFS_OBJECT_REFERENCE_FIND);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSReleaseObjectInfo Decrement count on object %p Cnt %d\n",
+ *ppObjectInfo,
+ lCount));
+ *ppObjectInfo = NULL;
+}
void
-AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo)
+AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo)
{
BOOLEAN bAcquiredTreeLock = FALSE;
+ AFSObjectInfoCB *pObjectInfo = NULL;
+ BOOLEAN bHeldInService;
+ AFSObjectInfoCB * pParentObjectInfo = NULL;
+ AFSFileID FileId;
LONG lCount;
- if ( BooleanFlagOn( ObjectInfo->Flags, AFS_OBJECT_ROOT_VOLUME))
+ if ( BooleanFlagOn( (*ppObjectInfo)->Flags, AFS_OBJECT_ROOT_VOLUME))
{
//
// embedded in the VolumeCB.
//
- ASSERT( TRUE);
+ ASSERT( FALSE);
return;
}
- ASSERT( ObjectInfo->ObjectReferenceCount == 0);
+ pObjectInfo = (AFSObjectInfoCB *) InterlockedCompareExchangePointer( (PVOID *)ppObjectInfo,
+ NULL,
+ *ppObjectInfo);
- if( !ExIsResourceAcquiredExclusiveLite( ObjectInfo->VolumeCB->ObjectInfoTree.TreeLock))
+ if ( pObjectInfo == NULL)
{
- ASSERT( !ExIsResourceAcquiredLite( ObjectInfo->VolumeCB->ObjectInfoTree.TreeLock));
+ return;
+ }
+
+ ASSERT( *ppObjectInfo == NULL);
+
+ ASSERT( pObjectInfo->ObjectReferenceCount == 0);
- AFSAcquireExcl( ObjectInfo->VolumeCB->ObjectInfoTree.TreeLock,
+ bHeldInService = BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_HELD_IN_SERVICE);
+
+ if( !ExIsResourceAcquiredExclusiveLite( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock))
+ {
+
+ ASSERT( !ExIsResourceAcquiredLite( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock));
+
+ AFSAcquireExcl( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock,
TRUE);
bAcquiredTreeLock = TRUE;
}
+ if ( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
+ {
+
+ pParentObjectInfo = AFSFindObjectInfo( pObjectInfo->VolumeCB,
+ &pObjectInfo->ParentFileId);
+ }
+
//
// Remove it from the tree and list if it was inserted
//
- if( BooleanFlagOn( ObjectInfo->Flags, AFS_OBJECT_INSERTED_HASH_TREE))
+ if( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_INSERTED_HASH_TREE))
{
- AFSRemoveHashEntry( &ObjectInfo->VolumeCB->ObjectInfoTree.TreeHead,
- &ObjectInfo->TreeEntry);
+ AFSRemoveHashEntry( &pObjectInfo->VolumeCB->ObjectInfoTree.TreeHead,
+ &pObjectInfo->TreeEntry);
}
- if( BooleanFlagOn( ObjectInfo->Flags, AFS_OBJECT_INSERTED_VOLUME_LIST))
+ if( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_INSERTED_VOLUME_LIST))
{
- if( ObjectInfo->ListEntry.fLink == NULL)
+ if( pObjectInfo->ListEntry.fLink == NULL)
{
- ObjectInfo->VolumeCB->ObjectInfoListTail = (AFSObjectInfoCB *)ObjectInfo->ListEntry.bLink;
+ pObjectInfo->VolumeCB->ObjectInfoListTail = (AFSObjectInfoCB *)pObjectInfo->ListEntry.bLink;
- if( ObjectInfo->VolumeCB->ObjectInfoListTail != NULL)
+ if( pObjectInfo->VolumeCB->ObjectInfoListTail != NULL)
{
- ObjectInfo->VolumeCB->ObjectInfoListTail->ListEntry.fLink = NULL;
+ pObjectInfo->VolumeCB->ObjectInfoListTail->ListEntry.fLink = NULL;
}
}
else
{
- ((AFSObjectInfoCB *)(ObjectInfo->ListEntry.fLink))->ListEntry.bLink = ObjectInfo->ListEntry.bLink;
+ ((AFSObjectInfoCB *)(pObjectInfo->ListEntry.fLink))->ListEntry.bLink = pObjectInfo->ListEntry.bLink;
}
- if( ObjectInfo->ListEntry.bLink == NULL)
+ if( pObjectInfo->ListEntry.bLink == NULL)
{
- ObjectInfo->VolumeCB->ObjectInfoListHead = (AFSObjectInfoCB *)ObjectInfo->ListEntry.fLink;
+ pObjectInfo->VolumeCB->ObjectInfoListHead = (AFSObjectInfoCB *)pObjectInfo->ListEntry.fLink;
- if( ObjectInfo->VolumeCB->ObjectInfoListHead != NULL)
+ if( pObjectInfo->VolumeCB->ObjectInfoListHead != NULL)
{
- ObjectInfo->VolumeCB->ObjectInfoListHead->ListEntry.bLink = NULL;
+ pObjectInfo->VolumeCB->ObjectInfoListHead->ListEntry.bLink = NULL;
}
}
else
{
- ((AFSObjectInfoCB *)(ObjectInfo->ListEntry.bLink))->ListEntry.fLink = ObjectInfo->ListEntry.fLink;
+ ((AFSObjectInfoCB *)(pObjectInfo->ListEntry.bLink))->ListEntry.fLink = pObjectInfo->ListEntry.fLink;
}
}
- if( ObjectInfo->ParentObjectInformation != NULL)
+ if( pParentObjectInfo != NULL)
{
- lCount = AFSObjectInfoDecrement( ObjectInfo->ParentObjectInformation,
+ ClearFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_PARENT_FID);
+
+ lCount = AFSObjectInfoDecrement( pParentObjectInfo,
AFS_OBJECT_REFERENCE_CHILD);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSDeleteObjectInfo Decrement count on parent object %p Cnt %d\n",
- ObjectInfo->ParentObjectInformation,
- lCount);
+ pParentObjectInfo,
+ lCount));
+
+ AFSReleaseObjectInfo( &pParentObjectInfo);
}
if( bAcquiredTreeLock)
{
- AFSReleaseResource( ObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
+ AFSReleaseResource( pObjectInfo->VolumeCB->ObjectInfoTree.TreeLock);
}
- //
- // Release the fid in the service
- //
-
- if( BooleanFlagOn( ObjectInfo->Flags, AFS_OBJECT_HELD_IN_SERVICE))
+ if( bHeldInService)
{
- AFSReleaseFid( &ObjectInfo->FileId);
+ FileId = pObjectInfo->FileId;
}
- ExDeleteResourceLite( &ObjectInfo->NonPagedInfo->ObjectInfoLock);
+ ExDeleteResourceLite( &pObjectInfo->NonPagedInfo->ObjectInfoLock);
+
+ ExDeleteResourceLite( &pObjectInfo->NonPagedInfo->DirectoryNodeHdrLock);
+
+ AFSExFreePoolWithTag( pObjectInfo->NonPagedInfo, AFS_NP_OBJECT_INFO_TAG);
- ExDeleteResourceLite( &ObjectInfo->NonPagedInfo->DirectoryNodeHdrLock);
+ AFSExFreePoolWithTag( pObjectInfo, AFS_OBJECT_INFO_TAG);
+
+ //
+ // Release the fid in the service
+ //
- AFSExFreePoolWithTag( ObjectInfo->NonPagedInfo, AFS_NP_OBJECT_INFO_TAG);
+ if( bHeldInService)
+ {
- AFSExFreePoolWithTag( ObjectInfo, AFS_OBJECT_INFO_TAG);
+ AFSReleaseFid( &FileId);
+ }
return;
}
UNICODE_STRING uniFullPathName = {0};
AFSNameArrayHdr *pNameArray = NULL;
AFSVolumeCB *pVolumeCB = NULL;
+ LONG VolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ AFSVolumeCB *pNewVolumeCB = NULL;
+ LONG NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
AFSDirectoryCB *pDirectoryEntry = NULL, *pParentDirEntry = NULL;
+ AFSDirectoryCB *pNewParentDirEntry = NULL;
WCHAR *pwchBuffer = NULL;
UNICODE_STRING uniComponentName, uniRemainingPath, uniParsedName;
ULONG ulNameDifference = 0;
pParentDirEntry = AFSGlobalRoot->DirectoryCB;
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_EVAL_ROOT;
+
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ VolumeReferenceReason);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSEvaluateRootEntry Increment count on volume %p Cnt %d\n",
+ "AFSEvaluateRootEntry Increment count on volume %p Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
lCount = InterlockedIncrement( &pParentDirEntry->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSEvaluateRootEntry Increment count on %wZ DE %p Ccb %p Cnt %d\n",
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- lCount);
+ lCount));
ntStatus = AFSLocateNameEntry( NULL,
NULL,
&uniParsedName,
pNameArray,
0,
- &pVolumeCB,
- &pParentDirEntry,
+ pVolumeCB,
+ pParentDirEntry,
+ &pNewVolumeCB,
+ &VolumeReferenceReason,
+ &pNewParentDirEntry,
&pDirectoryEntry,
NULL);
- if( !NT_SUCCESS( ntStatus) ||
- ntStatus == STATUS_REPARSE)
+ if ( pNewVolumeCB != NULL)
{
-
//
- // The volume lock was released on failure or reparse above
- // Except for STATUS_OBJECT_NAME_NOT_FOUND
+ // AFSLocateNameEntry returns pNewVolumeCB with a reference held
+ // even if pVolumeCB == pNewVolumeCB. It is always safe to release
+ // the reference on pVolumeCB that was held prior to the call.
+ // If pVolumeCB == pNewVolumeCB, the reference from AFSLocateNameEntry
+ // will be released second.
//
- if( ntStatus == STATUS_OBJECT_NAME_NOT_FOUND)
- {
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- if( pVolumeCB != NULL)
- {
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSEvaluateRootEntry Decrement count on volume %p Reason %u Cnt %d\n",
+ pVolumeCB,
+ VolumeReferenceReason,
+ lCount));
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ pVolumeCB = pNewVolumeCB;
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSEvaluateRootEntry Decrement count on volume %p Cnt %d\n",
- pVolumeCB,
- lCount);
- }
+ pNewVolumeCB = NULL;
- if( pDirectoryEntry != NULL)
- {
+ VolumeReferenceReason = NewVolumeReferenceReason;
- lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
+ NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ }
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSEvaluateRootEntry Decrement1 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirectoryEntry->NameInformation.FileName,
- pDirectoryEntry,
- NULL,
- lCount);
+ //
+ // AFSLocateNameEntry does not alter the reference count of
+ // pParentDirectoryCB and it returns pNewParentDirectoryCB with
+ // a reference held.
+ //
- ASSERT( lCount >= 0);
- }
- else
- {
+ lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
- lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSEvaluateRootEntry DecrementX count on %wZ DE %p Cnt %d\n",
+ &pParentDirEntry->NameInformation.FileName,
+ pParentDirEntry,
+ lCount));
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSEvaluateRootEntry Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pParentDirEntry->NameInformation.FileName,
- pParentDirEntry,
- NULL,
- lCount);
+ pParentDirEntry = pNewParentDirEntry;
- ASSERT( lCount >= 0);
- }
- }
+ pNewParentDirEntry = NULL;
+
+ if( !NT_SUCCESS( ntStatus) ||
+ ntStatus == STATUS_REPARSE)
+ {
pVolumeCB = NULL;
*TargetDirEntry = pDirectoryEntry;
+ pDirectoryEntry = NULL;
+
try_exit:
+ if( pDirectoryEntry != NULL)
+ {
+
+ lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSEvaluateRootEntry Decrement1 count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pDirectoryEntry->NameInformation.FileName,
+ pDirectoryEntry,
+ NULL,
+ lCount));
+
+ ASSERT( lCount >= 0);
+ }
+
+ if ( pParentDirEntry != NULL)
+ {
+
+ lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSEvaluateRootEntry Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pParentDirEntry->NameInformation.FileName,
+ pParentDirEntry,
+ NULL,
+ lCount));
+
+ ASSERT( lCount >= 0);
+ }
+
if( pDirEntry != NULL)
{
if( pVolumeCB != NULL)
{
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSEvaluateRootEntry Decrement2 count on volume %p Cnt %d\n",
+ "AFSEvaluateRootEntry Decrement2 count on volume %p Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
}
if( pNameArray != NULL)
!BooleanFlagOn( Fcb->ObjectInformation->Flags, AFS_OBJECT_FLAGS_DELETED))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupEntry Acquiring Fcb lock %p SHARED %08lX\n",
&Fcb->NPFcb->Resource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireShared( &Fcb->NPFcb->Resource,
TRUE);
if( Fcb->OpenReferenceCount > 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupEntry Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &Fcb->NPFcb->SectionObjectResource,
TRUE);
if( !NT_SUCCESS( stIoStatus.Status))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCleanupFcb CcFlushCache [1] failure FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX Bytes 0x%08lX\n",
Fcb->ObjectInformation->FileId.Cell,
Fcb->ObjectInformation->FileId.Vnode,
Fcb->ObjectInformation->FileId.Unique,
stIoStatus.Status,
- stIoStatus.Information);
+ stIoStatus.Information));
ntStatus = stIoStatus.Status;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSCleanupFcb CcPurgeCacheSection [1] failure FID %08lX-%08lX-%08lX-%08lX\n",
Fcb->ObjectInformation->FileId.Cell,
Fcb->ObjectInformation->FileId.Volume,
Fcb->ObjectInformation->FileId.Vnode,
- Fcb->ObjectInformation->FileId.Unique);
+ Fcb->ObjectInformation->FileId.Unique));
SetFlag( Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSCleanupFcb Cc [1] FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
Fcb->ObjectInformation->FileId.Cell,
Fcb->ObjectInformation->FileId.Volume,
Fcb->ObjectInformation->FileId.Vnode,
Fcb->ObjectInformation->FileId.Unique,
- ntStatus);
+ ntStatus));
SetFlag( Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupFcb Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &Fcb->NPFcb->SectionObjectResource);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupEntry Releasing Fcb lock %p SHARED %08lX\n",
&Fcb->NPFcb->Resource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &Fcb->NPFcb->Resource);
(AFS_SERVER_PURGE_SLEEP * pControlDeviceExt->Specific.Control.FcbPurgeTimeCount.QuadPart))))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupFcb Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
if ( AFSAcquireExcl( &Fcb->NPFcb->SectionObjectResource, ForceFlush))
{
if( !NT_SUCCESS( stIoStatus.Status))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSCleanupFcb CcFlushCache [2] failure FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX Bytes 0x%08lX\n",
Fcb->ObjectInformation->FileId.Cell,
Fcb->ObjectInformation->FileId.Vnode,
Fcb->ObjectInformation->FileId.Unique,
stIoStatus.Status,
- stIoStatus.Information);
+ stIoStatus.Information));
ntStatus = stIoStatus.Status;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSCleanupFcb CcPurgeCacheSection [2] failure FID %08lX-%08lX-%08lX-%08lX\n",
Fcb->ObjectInformation->FileId.Cell,
Fcb->ObjectInformation->FileId.Volume,
Fcb->ObjectInformation->FileId.Vnode,
- Fcb->ObjectInformation->FileId.Unique);
+ Fcb->ObjectInformation->FileId.Unique));
SetFlag( Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSCleanupFcb Cc [2] FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
Fcb->ObjectInformation->FileId.Cell,
Fcb->ObjectInformation->FileId.Volume,
Fcb->ObjectInformation->FileId.Vnode,
Fcb->ObjectInformation->FileId.Unique,
- ntStatus);
+ ntStatus));
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupFcb Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &Fcb->NPFcb->SectionObjectResource);
if( BooleanFlagOn( DirEntry->Flags, AFS_DIR_ENTRY_NOT_IN_PARENT_TREE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRemoveNameEntry DE %p for %wZ has NOT_IN flag set\n",
DirEntry,
- &DirEntry->NameInformation.FileName);
+ &DirEntry->NameInformation.FileName));
try_return( ntStatus);
}
// Remove the entry from the parent tree
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRemoveNameEntry DE %p for %wZ removing from case sensitive tree\n",
DirEntry,
- &DirEntry->NameInformation.FileName);
+ &DirEntry->NameInformation.FileName));
AFSRemoveCaseSensitiveDirEntry( &ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.CaseSensitiveTreeHead,
DirEntry);
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRemoveNameEntry DE %p for %wZ removing from case insensitive tree\n",
DirEntry,
- &DirEntry->NameInformation.FileName);
+ &DirEntry->NameInformation.FileName));
AFSRemoveCaseInsensitiveDirEntry( &ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.CaseInsensitiveTreeHead,
DirEntry);
// From the short name tree
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRemoveNameEntry DE %p for %wZ removing from shortname tree\n",
DirEntry,
- &DirEntry->NameInformation.FileName);
+ &DirEntry->NameInformation.FileName));
AFSRemoveShortNameDirEntry( &ParentObjectInfo->Specific.Directory.ShortNameTree,
DirEntry);
ClearFlag( DirEntry->Flags, AFS_DIR_ENTRY_INSERTED_SHORT_NAME);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSRemoveNameEntry DE %p for %wZ setting NOT_IN flag\n",
DirEntry,
- &DirEntry->NameInformation.FileName);
+ &DirEntry->NameInformation.FileName));
SetFlag( DirEntry->Flags, AFS_DIR_ENTRY_NOT_IN_PARENT_TREE);
if( hToken == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NETWORK_PROVIDER,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NETWORK_PROVIDER,
AFS_TRACE_LEVEL_ERROR,
- "AFSGetAuthenticationId Failed to retrieve impersonation or primary token\n");
+ "AFSGetAuthenticationId Failed to retrieve impersonation or primary token\n"));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_NETWORK_PROVIDER,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NETWORK_PROVIDER,
AFS_TRACE_LEVEL_ERROR,
- "AFSGetAuthenticationId Failed to retrieve information Status %08lX\n", ntStatus);
+ "AFSGetAuthenticationId Failed to retrieve information Status %08lX\n",
+ ntStatus));
try_return( ntStatus);
}
liAuthId.HighPart = pTokenInfo->AuthenticationId.HighPart;
liAuthId.LowPart = pTokenInfo->AuthenticationId.LowPart;
- AFSDbgLogMsg( AFS_SUBSYSTEM_NETWORK_PROVIDER,
+ AFSDbgTrace(( AFS_SUBSYSTEM_NETWORK_PROVIDER,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetAuthenticationId Successfully retrieved authentication ID %I64X\n",
- liAuthId.QuadPart);
+ liAuthId.QuadPart));
try_exit:
AFSDbgLogMsg = LibraryInit->AFSDbgLogMsg;
+ AFSDebugTraceFnc = AFSDbgLogMsg;
+
AFSAddConnectionEx = LibraryInit->AFSAddConnectionEx;
AFSExAllocatePoolWithTag = LibraryInit->AFSExAllocatePoolWithTag;
ntStatus = AFSInitVolume( NULL,
&LibraryInit->GlobalRootFid,
+ AFS_VOLUME_REFERENCE_GLOBAL_ROOT,
&AFSGlobalRoot);
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSInitializeLibrary AFSInitVolume failure %08lX\n",
- ntStatus);
+ ntStatus));
try_return( ntStatus);
}
if( !NT_SUCCESS( ntStatus))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOAD_LIBRARY | AFS_SUBSYSTEM_INIT_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSInitializeLibrary AFSInitRootFcb failure %08lX\n",
- ntStatus);
+ ntStatus));
- lCount = InterlockedDecrement( &AFSGlobalRoot->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( AFSGlobalRoot,
+ AFS_VOLUME_REFERENCE_GLOBAL_ROOT);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSInitializeLibrary Increment count on volume %p Cnt %d\n",
+ "AFSInitializeLibrary Decrement count on volume %p Cnt %d\n",
AFSGlobalRoot,
- lCount);
+ lCount));
AFSReleaseResource( AFSGlobalRoot->VolumeLock);
AFSInitVolumeWorker( AFSGlobalRoot);
- lCount = InterlockedDecrement( &AFSGlobalRoot->VolumeReferenceCount);
+ lCount = AFSVolumeDecrement( AFSGlobalRoot,
+ AFS_VOLUME_REFERENCE_GLOBAL_ROOT);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInitializeLibrary Decrement count on volume %p Cnt %d\n",
AFSGlobalRoot,
- lCount);
+ lCount));
AFSReleaseResource( AFSGlobalRoot->VolumeLock);
lCount = AFSObjectInfoDecrement( AFSGlobalDotDirEntry->ObjectInformation,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDeleteObjectInfo( AFSGlobalDotDirEntry->ObjectInformation);
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCloseLibrary Decrement count on parent object %p Cnt %d\n",
+ AFSGlobalDotDirEntry->ObjectInformation,
+ lCount));
+
+ AFSDeleteObjectInfo( &AFSGlobalDotDirEntry->ObjectInformation);
ExDeleteResourceLite( &AFSGlobalDotDirEntry->NonPaged->Lock);
lCount = AFSObjectInfoDecrement( AFSGlobalDotDotDirEntry->ObjectInformation,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDeleteObjectInfo( AFSGlobalDotDotDirEntry->ObjectInformation);
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCloseLibrary Decrement count on parent object %p Cnt %d\n",
+ AFSGlobalDotDotDirEntry->ObjectInformation,
+ lCount));
+
+ AFSDeleteObjectInfo( &AFSGlobalDotDotDirEntry->ObjectInformation);
ExDeleteResourceLite( &AFSGlobalDotDotDirEntry->NonPaged->Lock);
lCount = AFSObjectInfoDecrement( pDirNode->ObjectInformation,
AFS_OBJECT_REFERENCE_GLOBAL);
- AFSDeleteObjectInfo( pDirNode->ObjectInformation);
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCloseLibrary Decrement count on parent object %p Cnt %d\n",
+ pDirNode->ObjectInformation,
+ lCount));
+
+ AFSDeleteObjectInfo( &pDirNode->ObjectInformation);
ExDeleteResourceLite( &pDirNode->NonPaged->Lock);
NTSTATUS ntStatus = STATUS_SUCCESS;
AFSVolumeCB *pVolumeCB = NULL;
+ LONG VolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ AFSVolumeCB *pNewVolumeCB = NULL;
+ LONG NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
AFSDeviceExt *pDevExt = (AFSDeviceExt *) AFSRDRDeviceObject->DeviceExtension;
AFSObjectInfoCB *pObjectInfo = NULL;
ULONGLONG ullIndex = 0;
UNICODE_STRING uniFullPathName, uniRemainingPath, uniComponentName, uniParsedName;
AFSNameArrayHdr *pNameArray = NULL;
AFSDirectoryCB *pDirectoryEntry = NULL, *pParentDirEntry = NULL;
+ AFSDirectoryCB *pNewParentDirEntry = NULL;
LONG lCount;
__Enter
if( pVolumeCB != NULL)
{
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_GET_OBJECT;
+
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ VolumeReferenceReason);
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Increment count on volume %p Cnt %d\n",
+ "AFSGetObjectStatus Increment count on volume %p Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
}
AFSReleaseResource( &pDevExt->Specific.RDR.VolumeTreeLock);
lCount = AFSObjectInfoIncrement( pObjectInfo,
AFS_OBJECT_REFERENCE_STATUS);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment1 count on object %p Cnt %d\n",
pObjectInfo,
- lCount);
-
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement count on volume %p Cnt %d\n",
- pVolumeCB,
- lCount);
+ lCount));
}
else
{
AFSAcquireShared( pVolumeCB->ObjectInfoTree.TreeLock,
TRUE);
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement2 count on volume %p Cnt %d\n",
- pVolumeCB,
- lCount);
-
ullIndex = AFSCreateLowIndex( &GetStatusInfo->FileID);
ntStatus = AFSLocateHashEntry( pVolumeCB->ObjectInfoTree.TreeHead,
lCount = AFSObjectInfoIncrement( pObjectInfo,
AFS_OBJECT_REFERENCE_STATUS);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment2 count on object %p Cnt %d\n",
pObjectInfo,
- lCount);
+ lCount));
}
AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock);
&AFSServerName,
TRUE) != 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
"AFSGetObjectStatus Name %wZ contains invalid server name\n",
- &uniFullPathName);
+ &uniFullPathName));
try_return( ntStatus = STATUS_OBJECT_PATH_INVALID);
}
// Increment the ref count on the volume and dir entry for correct processing below
//
- lCount = InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ VolumeReferenceReason = AFS_VOLUME_REFERENCE_GET_OBJECT;
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ lCount = AFSVolumeIncrement( pVolumeCB,
+ VolumeReferenceReason);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Increment2 count on volume %p Cnt %d\n",
+ "AFSGetObjectStatus Increment2 count on volume %p Reason %u Cnt %d\n",
pVolumeCB,
- lCount);
+ VolumeReferenceReason,
+ lCount));
lCount = InterlockedIncrement( &pParentDirEntry->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment count on %wZ DE %p Ccb %p Cnt %d\n",
&pParentDirEntry->NameInformation.FileName,
pParentDirEntry,
NULL,
- lCount);
+ lCount));
ntStatus = AFSLocateNameEntry( NULL,
NULL,
pNameArray,
AFS_LOCATE_FLAGS_NO_MP_TARGET_EVAL |
AFS_LOCATE_FLAGS_NO_SL_TARGET_EVAL,
- &pVolumeCB,
- &pParentDirEntry,
+ pVolumeCB,
+ pParentDirEntry,
+ &pNewVolumeCB,
+ &NewVolumeReferenceReason,
+ &pNewParentDirEntry,
&pDirectoryEntry,
NULL);
- if( !NT_SUCCESS( ntStatus) ||
- ntStatus == STATUS_REPARSE)
+ if ( pNewVolumeCB != NULL)
{
//
- // The volume lock was released on failure or reparse above
- // Except for STATUS_OBJECT_NAME_NOT_FOUND
+ // AFSLocateNameEntry returns pNewVolumeCB with a reference held
+ // even if pVolumeCB == pNewVolumeCB. It is always safe to release
+ // the reference on pVolumeCB that was held prior to the call.
+ // If pVolumeCB == pNewVolumeCB, the reference from AFSLocateNameEntry
+ // will be released second.
//
- if( ntStatus == STATUS_OBJECT_NAME_NOT_FOUND)
- {
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
- if( pVolumeCB != NULL)
- {
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Decrement count on volume %p Reason %u Cnt %d\n",
+ pVolumeCB,
+ VolumeReferenceReason,
+ lCount));
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
+ pVolumeCB = pNewVolumeCB;
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement3 count on volume %p Cnt %d\n",
- pVolumeCB,
- lCount);
- }
+ pNewVolumeCB = NULL;
- if( pDirectoryEntry != NULL)
- {
+ VolumeReferenceReason = NewVolumeReferenceReason;
- lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
+ NewVolumeReferenceReason = AFS_VOLUME_REFERENCE_INVALID;
+ }
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement1 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirectoryEntry->NameInformation.FileName,
- pDirectoryEntry,
- NULL,
- lCount);
+ //
+ // AFSLocateNameEntry does not alter the reference count of
+ // pParentDirectoryCB and it returns pNewParentDirectoryCB with
+ // a reference held.
+ //
- ASSERT( lCount >= 0);
- }
- else
- {
+ lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
- lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus DecrementX count on %wZ DE %p Cnt %d\n",
+ &pParentDirEntry->NameInformation.FileName,
+ pParentDirEntry,
+ lCount));
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pParentDirEntry->NameInformation.FileName,
- pParentDirEntry,
- NULL,
- lCount);
+ pParentDirEntry = pNewParentDirEntry;
- ASSERT( lCount >= 0);
- }
- }
+ pNewParentDirEntry = NULL;
+
+ if( !NT_SUCCESS( ntStatus) ||
+ ntStatus == STATUS_REPARSE)
+ {
pVolumeCB = NULL;
try_return( ntStatus);
}
- //
- // Remove the reference obtained from AFSLocateNameEntry
- //
-
- lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement3 count on %wZ DE %p Ccb %p Cnt %d\n",
- &pDirectoryEntry->NameInformation.FileName,
- pDirectoryEntry,
- NULL,
- lCount);
-
- ASSERT( lCount >= 0);
-
pObjectInfo = pDirectoryEntry->ObjectInformation;
lCount = AFSObjectInfoIncrement( pObjectInfo,
AFS_OBJECT_REFERENCE_STATUS);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Increment3 count on object %p Cnt %d\n",
pObjectInfo,
- lCount);
-
- if( pVolumeCB != NULL)
- {
-
- lCount = InterlockedDecrement( &pVolumeCB->VolumeReferenceCount);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSGetObjectStatus Decrement4 count on volume %p Cnt %d\n",
- pVolumeCB,
- lCount);
- }
+ lCount));
}
//
try_exit:
+ if( pDirectoryEntry != NULL)
+ {
+
+ lCount = InterlockedDecrement( &pDirectoryEntry->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Decrement1 count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pDirectoryEntry->NameInformation.FileName,
+ pDirectoryEntry,
+ NULL,
+ lCount));
+
+ ASSERT( lCount >= 0);
+ }
+
+ if ( pParentDirEntry != NULL)
+ {
+
+ lCount = InterlockedDecrement( &pParentDirEntry->DirOpenReferenceCount);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Decrement2 count on %wZ DE %p Ccb %p Cnt %d\n",
+ &pParentDirEntry->NameInformation.FileName,
+ pParentDirEntry,
+ NULL,
+ lCount));
+
+ ASSERT( lCount >= 0);
+ }
+
if( pObjectInfo != NULL)
{
lCount = AFSObjectInfoDecrement( pObjectInfo,
AFS_OBJECT_REFERENCE_STATUS);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSGetObjectStatus Decrement count on object %p Cnt %d\n",
pObjectInfo,
- lCount);
+ lCount));
+ }
+
+ if( pVolumeCB != NULL)
+ {
+
+ lCount = AFSVolumeDecrement( pVolumeCB,
+ VolumeReferenceReason);
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSGetObjectStatus Decrement4 count on volume %p Reason %u Cnt %d\n",
+ pVolumeCB,
+ VolumeReferenceReason,
+ lCount));
}
if( pNameArray != NULL)
// Search for the entry in the parent
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSCheckSymlinkAccess Searching for entry %wZ case sensitive\n",
- ComponentName);
+ ComponentName));
ulCRC = AFSGenerateCRC( ComponentName,
FALSE);
// Missed so perform a case insensitive lookup
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSCheckSymlinkAccess Searching for entry %wZ case insensitive\n",
- ComponentName);
+ ComponentName));
ulCRC = AFSGenerateCRC( ComponentName,
TRUE);
NULL))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSCheckSymlinkAccess Searching for entry %wZ short name\n",
- ComponentName);
+ ComponentName));
AFSLocateShortNameDirEntry( ParentDirectoryCB->ObjectInformation->Specific.Directory.ShortNameTree,
ulCRC,
{
lCount = InterlockedIncrement( &pDirEntry->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCheckSymlinkAccess Increment count on %wZ DE %p Ccb %p Cnt %d\n",
&pDirEntry->NameInformation.FileName,
pDirEntry,
NULL,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
}
if( pDirEntry == NULL)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSCheckSymlinkAccess Failed to locate entry %wZ ntStatus %08X\n",
ComponentName,
- STATUS_OBJECT_NAME_NOT_FOUND);
+ STATUS_OBJECT_NAME_NOT_FOUND));
try_return( ntStatus = STATUS_OBJECT_NAME_NOT_FOUND);
}
// denied.
//
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSCheckSymlinkAccess Failing symlink access to entry %wZ REPARSE_POINT_NOT_RESOLVED\n",
- ComponentName);
+ ComponentName));
ntStatus = STATUS_REPARSE_POINT_NOT_RESOLVED;
lCount = InterlockedDecrement( &pDirEntry->DirOpenReferenceCount);
- AFSDbgLogMsg( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_DIRENTRY_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCheckSymlinkAccess Decrement count on %wZ DE %p Ccb %p Cnt %d\n",
&pDirEntry->NameInformation.FileName,
pDirEntry,
NULL,
- lCount);
+ lCount));
ASSERT( lCount >= 0);
if( pWorldSID == NULL)
{
AFSPrint( "AFSCreateDefaultSecurityDescriptor unable to allocate World SID\n");
+
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
bLocked = TRUE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPerformObjectInvalidate Acquiring Fcb extents lock %p SHARED %08lX\n",
&ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireShared( &ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsResource,
TRUE);
else
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPerformObjectInvalidation Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&ObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSPerformObjectInvalidation CcPurgeCacheSection failure FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
SetFlag( ObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSPerformObjectInvalidation FID %08lX-%08lX-%08lX-%08lX Status 0x%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
ObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
SetFlag( ObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPerformObjectInvalidation Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&ObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->SectionObjectResource);
}
bExtentsLocked = FALSE;
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPerformObjectInvalidation Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
&ObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSPerformObjectInvalidation [1] CcPurgeCacheSection failure FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
bPurgeOnClose = TRUE;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSPerformObjectInvalidation [2] CcPurgeCacheSection failure FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
bPurgeOnClose = TRUE;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSPerformObjectInvalidation [3] CcPurgeCacheSection failure FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
bPurgeOnClose = TRUE;
}
FALSE))
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_IO_PROCESSING,
AFS_TRACE_LEVEL_WARNING,
"AFSPerformObjectInvalidation [4] CcPurgeCacheSection failure FID %08lX-%08lX-%08lX-%08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
- ObjectInfo->FileId.Unique);
+ ObjectInfo->FileId.Unique));
bPurgeOnClose = TRUE;
}
ntStatus = GetExceptionCode();
- AFSDbgLogMsg( 0,
+ AFSDbgTrace(( 0,
0,
"EXCEPTION - AFSPerformObjectInvalidation FID %08lX-%08lX-%08lX-%08lX Status %08lX\n",
ObjectInfo->FileId.Cell,
ObjectInfo->FileId.Volume,
ObjectInfo->FileId.Vnode,
ObjectInfo->FileId.Unique,
- ntStatus);
+ ntStatus));
}
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPerformObjectInvalidation Releasing Fcb SectionObject lock %p EXCL %08lX\n",
&ObjectInfo->Fcb->NPFcb->SectionObjectResource,
- PsGetCurrentThread());
+ PsGetCurrentThread()));
AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->SectionObjectResource);
}
lCount = AFSObjectInfoDecrement( ObjectInfo,
AFS_OBJECT_REFERENCE_INVALIDATION);
- AFSDbgLogMsg( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
+ AFSDbgTrace(( AFS_SUBSYSTEM_OBJECT_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSPerformObjectInvalidation Decrement count on object %p Cnt %d\n",
ObjectInfo,
- lCount);
+ lCount));
}
return ntStatus;