Windows: AFSPerformObjectInvalidate FILE processing
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 26 Aug 2013 00:02:51 +0000 (20:02 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Fri, 30 Aug 2013 19:11:33 +0000 (12:11 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>

src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp

index d87aff2..668d420 100644 (file)
@@ -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;