pCurrentObject->FileId.Volume,
pCurrentObject->FileId.Vnode,
pCurrentObject->FileId.Unique,
- ntStatus);
+ STATUS_FILE_DELETED);
try_return( ntStatus = STATUS_FILE_DELETED);
}
pCurrentObject->FileId.Volume,
pCurrentObject->FileId.Vnode,
pCurrentObject->FileId.Unique,
- ntStatus);
+ STATUS_DELETE_PENDING);
try_return( ntStatus = STATUS_DELETE_PENDING);
}
pCurrentVolume,
pCurrentVolume->VolumeReferenceCount);
- AFSReleaseResource( pCurrentVolume->VolumeLock);
-
pCurrentVolume = AFSGlobalRoot;
- AFSAcquireShared( pCurrentVolume->VolumeLock,
- TRUE);
-
InterlockedIncrement( &pCurrentVolume->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
pCurrentVolume,
pCurrentVolume->VolumeReferenceCount);
- AFSReleaseResource( pCurrentVolume->VolumeLock);
-
ntStatus = AFSBuildMountPointTarget( AuthGroup,
pDirEntry,
&pCurrentVolume);
ASSERT( pCurrentVolume->VolumeReferenceCount > 1);
- ASSERT( ExIsResourceAcquiredLite( pCurrentVolume->VolumeLock));
-
//
// Replace the current name for the mp with the volume root of the target
//
ntStatus = AFSProcessDFSLink( pDirEntry,
FileObject,
- &uniRemainingPath);
+ &uniRemainingPath,
+ AuthGroup);
}
else
{
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_ERROR,
- "AFSLocateNameEntry (FO: %08lX) Deleted parent %wZ FID %08lX-%08lX-%08lX-%08lX\n",
+ "AFSLocateNameEntry (FO: %08lX) Deleted entry %wZ FID %08lX-%08lX-%08lX-%08lX\n",
FileObject,
&pDirEntry->NameInformation.FileName,
pCurrentObject->FileId.Cell,
if( InterlockedDecrement( &pDirEntry->OpenReferenceCount) == 0)
{
- AFSDbgLogMsg( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING|AFS_SUBSYSTEM_CLEANUP_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSLocateNameEntry Deleting dir entry %08lX (%08lX) for %wZ\n",
pDirEntry,
ASSERT( pCurrentVolume->VolumeReferenceCount > 1);
- ASSERT( ExIsResourceAcquiredLite( pCurrentVolume->VolumeLock));
-
InterlockedDecrement( &pCurrentVolume->VolumeReferenceCount);
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
"AFSLocateNameEntry Decrement3 count on volume %08lX Cnt %d\n",
pCurrentVolume,
pCurrentVolume->VolumeReferenceCount);
-
- AFSReleaseResource( pCurrentVolume->VolumeLock);
}
if( RootPathName->Buffer != uniFullPathName.Buffer)
*FileName = pIrpSp->FileObject->FileName;
//
- // Grab the root node exclusive before returning
+ // Grab the root node while checking state
//
- AFSAcquireExcl( pVolumeCB->VolumeLock,
- TRUE);
+ AFSAcquireShared( pVolumeCB->VolumeLock,
+ TRUE);
if( BooleanFlagOn( pVolumeCB->ObjectInformation.Flags, AFS_OBJECT_FLAGS_OBJECT_INVALID) ||
BooleanFlagOn( pVolumeCB->Flags, AFS_VOLUME_FLAGS_OFFLINE))
}
}
- AFSConvertToShared( pVolumeCB->VolumeLock);
+ AFSReleaseResource( pVolumeCB->VolumeLock);
if( BooleanFlagOn( pDirEntry->ObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY))
{
pDirEntry->ObjectInformation->FileId.Unique,
ntStatus);
- AFSReleaseResource( pVolumeCB->VolumeLock);
-
try_return( ntStatus);
}
}
"AFSParseName (%08lX) Failed to allocate full name buffer\n",
Irp);
- AFSReleaseResource( pVolumeCB->VolumeLock);
-
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
AFSExFreePool( uniFullName.Buffer);
- AFSReleaseResource( pVolumeCB->VolumeLock);
-
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
AFSExFreePool( uniFullName.Buffer);
- AFSReleaseResource( pVolumeCB->VolumeLock);
-
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
AFSExFreePool( uniFullName.Buffer);
- AFSReleaseResource( pVolumeCB->VolumeLock);
-
try_return( ntStatus);
}
// Be sure we are online and ready to go
//
- AFSAcquireExcl( AFSGlobalRoot->VolumeLock,
- TRUE);
+ AFSAcquireShared( AFSGlobalRoot->VolumeLock,
+ TRUE);
if( BooleanFlagOn( AFSGlobalRoot->ObjectInformation.Flags, AFS_OBJECT_FLAGS_OBJECT_INVALID) ||
BooleanFlagOn( AFSGlobalRoot->Flags, AFS_VOLUME_FLAGS_OFFLINE))
}
}
+ AFSReleaseResource( AFSGlobalRoot->VolumeLock);
+
if( !BooleanFlagOn( AFSGlobalRoot->ObjectInformation.Flags, AFS_OBJECT_FLAGS_DIRECTORY_ENUMERATED))
{
Irp,
ntStatus);
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
-
try_return( ntStatus);
}
}
NULL,
AFSGlobalRoot->DirectoryCB->OpenReferenceCount);
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
-
*VolumeCB = NULL;
FileName->Length = 0;
NULL,
AFSGlobalRoot->DirectoryCB->OpenReferenceCount);
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
-
*VolumeCB = NULL;
FileName->Length = 0;
NULL,
AFSGlobalRoot->DirectoryCB->OpenReferenceCount);
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
-
ClearFlag( *ParseFlags, AFS_PARSE_FLAG_ROOT_ACCESS);
*VolumeCB = NULL;
Irp,
&uniComponentName);
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
-
//
// Add in the full share name to pass back
//
if( !NT_SUCCESS( ntStatus))
{
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
if ( bIsAllShare &&
uniRemainingPath.Length == 0 &&
}
//
- // We only need the volume shared at this point
- //
-
- AFSConvertToShared( pVolumeCB->VolumeLock);
-
- //
// Init our name array
//
"AFSParseName (%08lX) Failed to initialize name array\n",
Irp);
- AFSReleaseResource( pVolumeCB->VolumeLock);
-
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
if( *VolumeCB != NULL)
{
-
ASSERT( (*VolumeCB)->VolumeReferenceCount > 1);
}
NTSTATUS ntStatus = STATUS_SUCCESS;
UNICODE_STRING uniName;
- AFSFileID stFileID;
AFSDirEnumEntry *pDirEnumEntry = NULL;
AFSDeviceExt *pDevExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension;
AFSDirHdr *pDirHdr = &AFSGlobalRoot->ObjectInformation.Specific.Directory.DirectoryNodeHdr;
// OK, ask the CM about this component name
//
- stFileID = AFSGlobalRoot->ObjectInformation.FileId;
-
ntStatus = AFSEvaluateTargetByName( AuthGroup,
- &stFileID,
+ &AFSGlobalRoot->ObjectInformation,
CellName,
&pDirEnumEntry);
{
//
- // We have the global root on entry so drop it now
- //
-
- AFSReleaseResource( AFSGlobalRoot->VolumeLock);
-
- //
// Build the root volume entry
//
if( !NT_SUCCESS( ntStatus))
{
-
- //
- // On failure this routine is expecting to hold the global root
- //
-
- AFSAcquireShared( AFSGlobalRoot->VolumeLock,
- TRUE);
-
try_return( ntStatus);
}
AFSReleaseResource( &pVolumeCB->RootFcb->NPFcb->Resource);
}
- AFSConvertToShared( pVolumeCB->VolumeLock);
-
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSBuildMountPointTarget Evaluated target of %wZ FID %08lX-%08lX-%08lX-%08lX as root volume\n",
InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ AFSReleaseResource( pVolumeCB->VolumeLock);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSBuildMountPointTarget Increment count on volume %08lX Cnt %d\n",
AFSReleaseResource( &pVolumeCB->RootFcb->NPFcb->Resource);
}
- AFSConvertToShared( pVolumeCB->VolumeLock);
-
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2,
"AFSBuildRootVolume Evaluated target of %wZ FID %08lX-%08lX-%08lX-%08lX as root volume\n",
InterlockedIncrement( &pVolumeCB->VolumeReferenceCount);
+ AFSReleaseResource( pVolumeCB->VolumeLock);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_VOLUME_REF_COUNTING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSBuildRootVolume Increment count on volume %08lX Cnt %d\n",
NTSTATUS
AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
IN PFILE_OBJECT FileObject,
- IN UNICODE_STRING *RemainingPath)
+ IN UNICODE_STRING *RemainingPath,
+ IN GUID *AuthGroup)
{
NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST;
UNICODE_STRING uniReparseName;
UNICODE_STRING uniMUPDeviceName;
AFSDirEnumEntry *pDirEntry = NULL;
- GUID *pAuthGroup = NULL;
__Enter
{
if( DirEntry->NameInformation.TargetName.Length == 0)
{
- if( DirEntry->ObjectInformation->Fcb != NULL)
- {
- pAuthGroup = &DirEntry->ObjectInformation->Fcb->AuthGroup;
- }
-
ntStatus = AFSEvaluateTargetByID( DirEntry->ObjectInformation,
- pAuthGroup,
+ AuthGroup,
FALSE,
&pDirEntry);