From: Jeffrey Altman Date: Mon, 26 Aug 2013 00:02:51 +0000 (-0400) Subject: Windows: AFSPerformObjectInvalidate FILE processing X-Git-Tag: openafs-stable-1_8_0pre1~1026 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=cb53d414bbc4ecaf1b136b4a3c82bea3cc9044b6;hp=b2713d121e360598fae5c4651d385e0a11ace05b Windows: AFSPerformObjectInvalidate FILE processing Refactor AFSPerformObjectInvalidate so that all of the non-DIRECT_IO processing variables are in the Extents processing section. Remove all references to Extents processing from the DIRECT_IO block. Change-Id: If1c20f9d09b415f4c032cea600983efe6ab0cdc3 Reviewed-on: http://gerrit.openafs.org/10188 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index d87aff2..668d420 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -9049,10 +9049,6 @@ AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo, AFSDeviceExt *pRDRDevExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension; NTSTATUS ntStatus = STATUS_SUCCESS; - LIST_ENTRY *le; - AFSExtent *pEntry; - ULONG ulProcessCount = 0; - ULONG ulCount = 0; LONG lCount; __Enter @@ -9097,25 +9093,22 @@ AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo, case AFS_INVALIDATE_DATA_VERSION: { - LARGE_INTEGER liCurrentOffset = {0,0}; - LARGE_INTEGER liFlushLength = {0,0}; - ULONG ulFlushLength = 0; - BOOLEAN bLocked = FALSE; - BOOLEAN bExtentsLocked = FALSE; - BOOLEAN bCleanExtents = FALSE; - if( ObjectInfo->FileType == AFS_FILE_TYPE_FILE && ObjectInfo->Fcb != NULL) { - AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->Resource, - TRUE); - - bLocked = TRUE; - if( BooleanFlagOn( pRDRDevExt->DeviceFlags, AFS_DEVICE_FLAG_DIRECT_SERVICE_IO)) { + AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING, + AFS_TRACE_LEVEL_VERBOSE, + "AFSPerformObjectInvalidate Acquiring Fcb lock %p EXCL %08lX\n", + &ObjectInfo->Fcb->NPFcb->Resource, + PsGetCurrentThread())); + + AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->Resource, + TRUE); + AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT, AFS_TRACE_LEVEL_VERBOSE, "AFSPerformObjectInvalidation DirectIO Acquiring Fcb SectionObject lock %p EXCL %08lX\n", @@ -9125,10 +9118,6 @@ AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo, AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->SectionObjectResource, TRUE); - AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource); - - bLocked = FALSE; - __try { @@ -9149,11 +9138,6 @@ AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo, SetFlag( ObjectInfo->Fcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE); } - else - { - - bCleanExtents = TRUE; - } } __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation())) { @@ -9179,9 +9163,38 @@ AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo, PsGetCurrentThread())); AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->SectionObjectResource); - } + + AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING, + AFS_TRACE_LEVEL_VERBOSE, + "AFSPerformObjectInvalidation DirectIO Releasing Fcb lock %p EXCL %08lX\n", + &ObjectInfo->Fcb->NPFcb->Resource, + PsGetCurrentThread())); + + AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource); + } else { + LIST_ENTRY *le; + AFSExtent *pEntry; + ULONG ulProcessCount = 0; + ULONG ulCount = 0; + LARGE_INTEGER liCurrentOffset = {0,0}; + LARGE_INTEGER liFlushLength = {0,0}; + ULONG ulFlushLength = 0; + BOOLEAN bLocked = FALSE; + BOOLEAN bExtentsLocked = FALSE; + BOOLEAN bCleanExtents = FALSE; + + AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING, + AFS_TRACE_LEVEL_VERBOSE, + "AFSPerformObjectInvalidate Acquiring Fcb lock %p EXCL %08lX\n", + &ObjectInfo->Fcb->NPFcb->Resource, + PsGetCurrentThread())); + + AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->Resource, + TRUE); + + bLocked = TRUE; AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING, AFS_TRACE_LEVEL_VERBOSE, @@ -9546,20 +9559,20 @@ AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo, AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsResource ); } - } - if ( bLocked) - { + if ( bLocked) + { - AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource); - } + AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource); + } - if ( bCleanExtents) - { + if ( bCleanExtents) + { - AFSReleaseCleanExtents( ObjectInfo->Fcb, - NULL); - } + AFSReleaseCleanExtents( ObjectInfo->Fcb, + NULL); + } + } } break;