pDirEnumResponse = (AFSDirEnumResp *)pBuffer;
+ AFSAcquireExcl( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSEnumerateDirectory Directory Complete FID %08lX-%08lX-%08lX-%08lX Snapshot-DV %08lX:%08lX Current-DV %08lX:%08lX Status %08lX\n",
pDirEnumResponse->CurrentDataVersion.LowPart,
ntStatus);
- ObjectInfoCB->DataVersion = pDirEnumResponse->SnapshotDataVersion;
-
if ( pDirEnumResponse->SnapshotDataVersion.QuadPart != pDirEnumResponse->CurrentDataVersion.QuadPart )
{
ObjectInfoCB->FileId.Vnode,
ObjectInfoCB->FileId.Unique);
}
+ else
+ {
+
+ ObjectInfoCB->DataVersion = pDirEnumResponse->SnapshotDataVersion;
+ }
+
+ AFSReleaseResource( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
else
{
pDirNode->ObjectInformation->FileId.Vnode,
pDirNode->ObjectInformation->FileId.Unique);
+ AFSAcquireExcl( pDirNode->ObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
SetFlag( pDirNode->ObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
pDirNode->ObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( pDirNode->ObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
}
ObjectInfoCB->FileId.Vnode,
ObjectInfoCB->FileId.Unique);
+ AFSAcquireExcl( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
SetFlag( ObjectInfoCB->Flags, AFS_OBJECT_FLAGS_VERIFY);
ObjectInfoCB->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
//
pDirEnumResponse = (AFSDirEnumResp *)pBuffer;
+ AFSAcquireExcl( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyDirectoryContent Directory Complete FID %08lX-%08lX-%08lX-%08lX Snapshot-DV %08lX:%08lX Current-DV %08lX:%08lX Status %08lX\n",
ntStatus = STATUS_SUCCESS;
- ObjectInfoCB->DataVersion = pDirEnumResponse->SnapshotDataVersion;
-
if ( pDirEnumResponse->SnapshotDataVersion.QuadPart != pDirEnumResponse->CurrentDataVersion.QuadPart )
{
ObjectInfoCB->FileId.Vnode,
ObjectInfoCB->FileId.Unique);
}
+ else
+ {
+
+ ObjectInfoCB->DataVersion = pDirEnumResponse->SnapshotDataVersion;
+ }
+
+ AFSReleaseResource( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
else
{
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique);
+ AFSAcquireExcl( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
SetFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
pObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
}
ObjectInfoCB->FileId.Vnode,
ObjectInfoCB->FileId.Unique);
+ AFSAcquireExcl( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
SetFlag( ObjectInfoCB->Flags, AFS_OBJECT_FLAGS_VERIFY);
ObjectInfoCB->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( ObjectInfoCB->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
//
ParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
}
- else
- {
-
- //
- // Update the parent data version
- //
-
- ParentObjectInfo->DataVersion = pResultCB->ParentDataVersion;
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSNotifyFileCreate entry %wZ ParentFID %08lX-%08lX-%08lX-%08lX Version %08lX:%08lX\n",
- FileName,
- ParentObjectInfo->FileId.Cell,
- ParentObjectInfo->FileId.Volume,
- ParentObjectInfo->FileId.Vnode,
- ParentObjectInfo->FileId.Unique,
- ParentObjectInfo->DataVersion.QuadPart);
- }
-
- AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
if( pDirNode == NULL)
{
+ SetFlag( ParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
+
+ ParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
+
try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
}
&pDirNode->NameInformation.FileName);
}
+ if ( !BooleanFlagOn( ParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY))
+ {
+
+ //
+ // Update the parent data version
+ //
+
+ ParentObjectInfo->DataVersion = pResultCB->ParentDataVersion;
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSNotifyFileCreate entry %wZ ParentFID %08lX-%08lX-%08lX-%08lX Version %08lX:%08lX\n",
+ FileName,
+ ParentObjectInfo->FileId.Cell,
+ ParentObjectInfo->FileId.Volume,
+ ParentObjectInfo->FileId.Vnode,
+ ParentObjectInfo->FileId.Unique,
+ ParentObjectInfo->DataVersion.QuadPart);
+ }
+
+ AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
+
//
// Return the directory node
//
// Update the data version
//
- ObjectInfo->DataVersion = pUpdateResultCB->DirEnum.DataVersion;
+ AFSAcquireExcl( ObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
+ if ( !BooleanFlagOn( ObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY))
+ {
+
+ ObjectInfo->DataVersion = pUpdateResultCB->DirEnum.DataVersion;
+ }
+
+ AFSReleaseResource( ObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
try_exit:
try_return( ntStatus);
}
+ AFSAcquireExcl( DirectoryCB->ObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
if( CheckOnly)
{
SetFlag( DirectoryCB->ObjectInformation->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
- DirectoryCB->ObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+ DirectoryCB->ObjectInformation->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
}
}
else
SetFlag( DirectoryCB->ObjectInformation->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
- DirectoryCB->ObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+ DirectoryCB->ObjectInformation->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
}
else
{
DirectoryCB->ObjectInformation->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
}
-
}
+ AFSReleaseResource( DirectoryCB->ObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock);
+
try_exit:
NOTHING;
// Update the information from the returned data
//
+ AFSAcquireExcl( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
if ( ParentObjectInfo->DataVersion.QuadPart == pRenameResultCB->SourceParentDataVersion.QuadPart - 1)
{
ParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
}
- if ( TargetParentObjectInfo->DataVersion.QuadPart == pRenameResultCB->TargetParentDataVersion.QuadPart - 1)
+ if ( ParentObjectInfo != TargetParentObjectInfo)
{
- TargetParentObjectInfo->DataVersion = pRenameResultCB->TargetParentDataVersion;
- }
- else
- {
+ if ( TargetParentObjectInfo->DataVersion.QuadPart == pRenameResultCB->TargetParentDataVersion.QuadPart - 1)
+ {
+
+ TargetParentObjectInfo->DataVersion = pRenameResultCB->TargetParentDataVersion;
+ }
+ else
+ {
- SetFlag( TargetParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
+ SetFlag( TargetParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
- TargetParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
+ TargetParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
+ }
}
//
DirectoryCB->Type.Data.ShortNameTreeEntry.HashIndex = 0;
}
+ AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
+
if( UpdatedFID != NULL)
{
*UpdatedFID = pRenameResultCB->DirEnum.FileId;
if( ObjectInfo->ParentObjectInformation != NULL)
{
+ AFSAcquireExcl( ObjectInfo->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
SetFlag( ObjectInfo->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
ObjectInfo->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( ObjectInfo->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
}
// Validate the parent data version
//
- if ( ObjectInfo->ParentObjectInformation != NULL &&
- ObjectInfo->ParentObjectInformation->DataVersion.QuadPart != pEvalResultCB->ParentDataVersion.QuadPart)
+ if ( ObjectInfo->ParentObjectInformation != NULL)
{
- SetFlag( ObjectInfo->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
+ AFSAcquireExcl( ObjectInfo->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
+ if ( ObjectInfo->ParentObjectInformation->DataVersion.QuadPart != pEvalResultCB->ParentDataVersion.QuadPart)
+ {
+
+ SetFlag( ObjectInfo->ParentObjectInformation->Flags, AFS_OBJECT_FLAGS_VERIFY);
- ObjectInfo->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+ ObjectInfo->ParentObjectInformation->DataVersion.QuadPart = (ULONGLONG)-1;
+ }
+
+ AFSReleaseResource( ObjectInfo->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
//
if( ntStatus == STATUS_OBJECT_PATH_INVALID)
{
+ AFSAcquireExcl( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
SetFlag( ParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
ParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
+
+ AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
}
try_return( ntStatus);
// Validate the parent data version
//
- if ( ParentObjectInfo != NULL &&
- ParentObjectInfo->DataVersion.QuadPart != pEvalResultCB->ParentDataVersion.QuadPart)
+ AFSAcquireExcl( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
+ TRUE);
+
+ if ( ParentObjectInfo->DataVersion.QuadPart != pEvalResultCB->ParentDataVersion.QuadPart)
{
SetFlag( ParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY);
ParentObjectInfo->DataVersion.QuadPart = (ULONGLONG)-1;
}
+ AFSReleaseResource( ParentObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
+
//
// Pass back the dir enum entry
//