Windows: Replace ParentObjectInformation pointer
[openafs.git] / src / WINNT / afsrdr / kernel / lib / AFSRead.cpp
index 660e90f..7d2e5b4 100644 (file)
@@ -45,11 +45,10 @@ AFSCachedRead( IN PDEVICE_OBJECT DeviceObject,
                IN LARGE_INTEGER StartingByte,
                IN ULONG ByteCount)
 {
+    UNREFERENCED_PARAMETER(DeviceObject);
     NTSTATUS           ntStatus = STATUS_SUCCESS;
     IO_STACK_LOCATION *pIrpSp = IoGetCurrentIrpStackLocation( Irp);
     PFILE_OBJECT       pFileObject = pIrpSp->FileObject;
-    AFSFcb            *pFcb = (AFSFcb *)pFileObject->FsContext;
-    AFSCcb            *pCcb = (AFSCcb *)pFileObject->FsContext2;
     BOOLEAN            bSynchronousIo = BooleanFlagOn( pFileObject->Flags, FO_SYNCHRONOUS_IO);
     VOID              *pSystemBuffer = NULL;
     ULONG              ulCurrentIO = 0, ulTotalLen = ByteCount;
@@ -97,7 +96,7 @@ AFSCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCachedRead (%08lX) Failed to lock system buffer\n",
+                              "AFSCachedRead (%p) Failed to lock system buffer\n",
                               Irp);
 
                 try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
@@ -120,7 +119,7 @@ AFSCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSCachedRead (%08lX) Failed CcCopyRead() %wZ @ %0I64X Status %08lX\n",
+                                  "AFSCachedRead (%p) Failed CcCopyRead() %wZ @ %0I64X Status %08lX\n",
                                   Irp,
                                   &pFileObject->FileName,
                                   liCurrentOffset.QuadPart,
@@ -135,7 +134,7 @@ AFSCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCachedRead (%08lX) CcCopyRead() Threw exception %wZ @ %0I64X Status %08lX\n",
+                              "AFSCachedRead (%p) CcCopyRead() Threw exception %wZ @ %0I64X Status %08lX\n",
                               Irp,
                               &pFileObject->FileName,
                               liCurrentOffset.QuadPart,
@@ -196,7 +195,6 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
     PFILE_OBJECT       pFileObject = pIrpSp->FileObject;
     AFSFcb            *pFcb = (AFSFcb *)pFileObject->FsContext;
     AFSCcb            *pCcb = (AFSCcb *)pFileObject->FsContext2;
-    BOOLEAN            bSynchronousIo = IoIsOperationSynchronous(Irp);
     VOID              *pSystemBuffer = NULL;
     BOOLEAN            bPagingIo = BooleanFlagOn( Irp->Flags, IRP_PAGING_IO);
     BOOLEAN            bLocked = FALSE;
@@ -206,12 +204,10 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
     ULONG              extentsCount = 0, runCount = 0;
     AFSExtent         *pStartExtent = NULL;
     AFSExtent         *pIgnoreExtent = NULL;
-    BOOLEAN            bExtentsMapped = FALSE;
     BOOLEAN            bCompleteIrp = TRUE;
     ULONG              ulReadByteCount;
     ULONG              ulByteCount;
     AFSDeviceExt      *pDevExt = (AFSDeviceExt *)DeviceObject->DeviceExtension;
-    ULONG              ulRequestCount = 0;
     LARGE_INTEGER      liCurrentTime, liLastRequestTime;
     AFSDeviceExt      *pControlDevExt = (AFSDeviceExt *)AFSControlDeviceObject->DeviceExtension;
     PFILE_OBJECT       pCacheFileObject = NULL;
@@ -226,7 +222,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSNonCachedRead (%08lX) Request larger than MaxIO %I64X\n",
+                          "AFSNonCachedRead (%p) Request larger than MaxIO %I64X\n",
                           Irp,
                           pDevExt->Specific.RDR.MaxIo.QuadPart);
 
@@ -241,7 +237,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSNonCachedRead (%08lX) Failed to map system buffer\n",
+                          "AFSNonCachedRead (%p) Failed to map system buffer\n",
                           Irp);
 
             try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES);
@@ -258,7 +254,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSNonCachedRead (%08lX) Zeroing to EOF zero byte length %08lX\n",
+                          "AFSNonCachedRead (%p) Zeroing to EOF zero byte length %08lX\n",
                           Irp,
                           zeroCount);
 
@@ -295,7 +291,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_EXTENT_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSNonCachedRead (%08lX) Failed to request extents Status %08lX\n",
+                          "AFSNonCachedRead (%p) Failed to request extents Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -309,7 +305,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSNonCachedRead Acquiring Fcb extents lock %08lX SHARED %08lX\n",
+                          "AFSNonCachedRead Acquiring Fcb extents lock %p SHARED %08lX\n",
                           &pFcb->NPFcb->Specific.File.ExtentsResource,
                           PsGetCurrentThread());
 
@@ -332,7 +328,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSNonCachedRead Releasing Fcb extents lock %08lX SHARED %08lX\n",
+                          "AFSNonCachedRead Releasing Fcb extents lock %p SHARED %08lX\n",
                           &pFcb->NPFcb->Specific.File.ExtentsResource,
                           PsGetCurrentThread());
 
@@ -368,7 +364,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSNonCachedRead (%08lX) Failed to request extents Status %08lX\n",
+                                  "AFSNonCachedRead (%p) Failed to request extents Status %08lX\n",
                                   Irp,
                                   ntStatus);
 
@@ -436,7 +432,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_EXTENT_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSNonCachedRead (%08lX) Failed to retrieve mapped extents Status %08lX\n",
+                          "AFSNonCachedRead (%p) Failed to retrieve mapped extents Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -445,7 +441,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead (%08lX) Successfully retrieved map extents count %08lX run count %08lX\n",
+                      "AFSNonCachedRead (%p) Successfully retrieved map extents count %d run count %d\n",
                       Irp,
                       extentsCount,
                       runCount);
@@ -466,7 +462,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSNonCachedRead (%08lX) Failed to process extent run for non-persistent cache Status %08lX\n",
+                              "AFSNonCachedRead (%p) Failed to process extent run for non-persistent cache Status %08lX\n",
                               Irp,
                               ntStatus);
             }
@@ -510,7 +506,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSNonCachedRead (%08lX) Failed to allocate IO run block\n",
+                              "AFSNonCachedRead (%p) Failed to allocate IO run block\n",
                               Irp);
 
                 try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES );
@@ -538,7 +534,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSNonCachedRead (%08lX) Failed to initialize IO run block Status %08lX\n",
+                          "AFSNonCachedRead (%p) Failed to initialize IO run block Status %08lX\n",
                           Irp,
                           ntStatus);
 
@@ -550,7 +546,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead Releasing Fcb extents lock %08lX SHARED %08lX\n",
+                      "AFSNonCachedRead Releasing Fcb extents lock %p SHARED %08lX\n",
                       &pFcb->NPFcb->Specific.File.ExtentsResource,
                       PsGetCurrentThread());
 
@@ -566,12 +562,12 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSNonCachedRead (%08lX) Failed to allocate IO gather block\n",
+                          "AFSNonCachedRead (%p) Failed to allocate IO gather block\n",
                           Irp);
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSNonCachedRead Acquiring(2) Fcb extents lock %08lX SHARED %08lX\n",
+                          "AFSNonCachedRead Acquiring(2) Fcb extents lock %p SHARED %08lX\n",
                           &pFcb->NPFcb->Specific.File.ExtentsResource,
                           PsGetCurrentThread());
 
@@ -625,7 +621,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead (%08lX) AFSStartIos completed Status %08lX\n",
+                      "AFSNonCachedRead (%p) AFSStartIos completed Status %08lX\n",
                       Irp,
                       ntStatus);
 
@@ -634,7 +630,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSNonCachedRead Acquiring(3) Fcb extents lock %08lX SHARED %08lX\n",
+                          "AFSNonCachedRead Acquiring(3) Fcb extents lock %p SHARED %08lX\n",
                           &pFcb->NPFcb->Specific.File.ExtentsResource,
                           PsGetCurrentThread());
 
@@ -659,27 +655,15 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
         ntStatus = pGatherIo->Status;
 
-#if 0
-        //
-        // Setup the MD5 for each extent
-        //
-
-        AFSSetupMD5Hash( pFcb,
-                         pStartExtent,
-                         extentsCount,
-                         pSystemBuffer,
-                         &StartingByte,
-                         ulReadByteCount);
-#endif
         AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead (%08lX) AFSStartIos wait completed Status %08lX\n",
+                      "AFSNonCachedRead (%p) AFSStartIos wait completed Status %08lX\n",
                       Irp,
                       ntStatus);
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead Acquiring(4) Fcb extents lock %08lX SHARED %08lX\n",
+                      "AFSNonCachedRead Acquiring(4) Fcb extents lock %p SHARED %08lX\n",
                       &pFcb->NPFcb->Specific.File.ExtentsResource,
                       PsGetCurrentThread());
 
@@ -692,7 +676,7 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead Releasing Fcb extents lock %08lX SHARED %08lX\n",
+                      "AFSNonCachedRead Releasing Fcb extents lock %p SHARED %08lX\n",
                       &pFcb->NPFcb->Specific.File.ExtentsResource,
                       PsGetCurrentThread());
 
@@ -703,8 +687,14 @@ AFSNonCachedRead( IN PDEVICE_OBJECT DeviceObject,
         // The data is there now.  Give back the extents now so the service
         // has some in hand
         //
-        (VOID) AFSReleaseExtentsWithFlush( pFcb,
-                                           &pCcb->AuthGroup);
+
+        if ( pFcb->Specific.File.ExtentLength > 4096)
+        {
+
+            (VOID) AFSReleaseExtentsWithFlush( pFcb,
+                                               &pCcb->AuthGroup,
+                                               FALSE);
+        }
 
 try_exit:
 
@@ -715,7 +705,7 @@ try_exit:
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSNonCachedRead (%08lX) Completed request Status %08lX\n",
+                      "AFSNonCachedRead (%p) Completed request Status %08lX\n",
                       Irp,
                       ntStatus);
 
@@ -734,7 +724,7 @@ try_exit:
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSNonCachedRead Releasing Fcb extents lock %08lX SHARED %08lX\n",
+                          "AFSNonCachedRead Releasing Fcb extents lock %p SHARED %08lX\n",
                           &pFcb->NPFcb->Specific.File.ExtentsResource,
                           PsGetCurrentThread());
 
@@ -743,12 +733,12 @@ try_exit:
 
         if (pGatherIo)
         {
-            AFSExFreePool(pGatherIo);
+            AFSExFreePoolWithTag(pGatherIo, AFS_GATHER_TAG);
         }
 
         if (NULL != pIoRuns && stIoRuns != pIoRuns)
         {
-            AFSExFreePool(pIoRuns);
+            AFSExFreePoolWithTag(pIoRuns, AFS_IO_RUN_TAG);
         }
 
         if (bCompleteIrp)
@@ -778,6 +768,7 @@ AFSRead( IN PDEVICE_OBJECT LibDeviceObject,
          IN PIRP Irp)
 {
 
+    UNREFERENCED_PARAMETER(LibDeviceObject);
     NTSTATUS ntStatus = STATUS_SUCCESS;
 
     __try
@@ -785,10 +776,12 @@ AFSRead( IN PDEVICE_OBJECT LibDeviceObject,
 
         ntStatus = AFSCommonRead( AFSRDRDeviceObject, Irp, NULL);
     }
-    __except( AFSExceptionFilter( GetExceptionCode(), GetExceptionInformation()) )
+    __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
     {
 
         ntStatus = STATUS_INSUFFICIENT_RESOURCES;
+
+        AFSDumpTraceFilesFnc();
     }
 
     return ntStatus;
@@ -799,8 +792,8 @@ AFSRead( IN PDEVICE_OBJECT LibDeviceObject,
 // Description:
 //
 //      This function is a slightly widened Dispatch handler for the
-//      AFS Read function.  The thrid parameter is FALSE if we were called
-//      at our dispatch point and TRUE if we have been posted.
+//      AFS Read function.  The third parameter is NULL if we were called
+//      at our dispatch point and a process handle if we have been posted.
 //
 //      After doing the obvious (completing MDL writes and so forth)
 //      we then post, or not.
@@ -816,22 +809,21 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
                IN HANDLE OnBehalfOf)
 {
 
+    UNREFERENCED_PARAMETER(OnBehalfOf);
     NTSTATUS            ntStatus = STATUS_SUCCESS;
     AFSDeviceExt       *pDeviceExt;
     IO_STACK_LOCATION  *pIrpSp;
     AFSFcb             *pFcb = NULL;
     AFSCcb             *pCcb = NULL;
     BOOLEAN             bReleaseMain = FALSE;
+    BOOLEAN             bReleaseSectionObject = FALSE;
     BOOLEAN             bReleasePaging = FALSE;
     BOOLEAN             bPagingIo = FALSE;
     BOOLEAN             bNonCachedIo = FALSE;
     BOOLEAN             bCompleteIrp = TRUE;
-    BOOLEAN             bMapped;
     PFILE_OBJECT        pFileObject = NULL;
     LARGE_INTEGER       liStartingByte;
     ULONG               ulByteCount;
-    VOID               *pSystemBuffer = NULL;
-    HANDLE              hCallingUser = NULL;
 
     pIrpSp = IoGetCurrentIrpStackLocation( Irp);
     pDeviceExt = (AFSDeviceExt *)DeviceObject->DeviceExtension;
@@ -861,7 +853,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_WARNING,
-                          "AFSCommonRead (%08lX) Open request after shutdown\n",
+                          "AFSCommonRead (%p) Open request after shutdown\n",
                           Irp);
 
             try_return( ntStatus = STATUS_TOO_LATE);
@@ -876,7 +868,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSCommonRead Attempted read (%08lX) when pFcb == NULL\n",
+                          "AFSCommonRead Attempted read (%p) when pFcb == NULL\n",
                           Irp);
 
             try_return( ntStatus = STATUS_INVALID_DEVICE_REQUEST);
@@ -895,7 +887,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSCommonRead Attempted read (%08lX) on an invalid node type %08lX\n",
+                          "AFSCommonRead Attempted read (%p) on an invalid node type %08lX\n",
                           Irp,
                           pFcb->Header.NodeTypeCode);
 
@@ -912,7 +904,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Processing file (PIOCTL) Offset %I64X Length %08lX Irp Flags %08lX\n",
+                          "AFSCommonRead (%p) Processing file (PIOCTL) Offset %I64X Length %08lX Irp Flags %08lX\n",
                           Irp,
                           liStartingByte.QuadPart,
                           ulByteCount,
@@ -928,7 +920,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Processing file (SHARE) Offset %I64X Length %08lX Irp Flags %08lX\n",
+                          "AFSCommonRead (%p) Processing file (SHARE) Offset %I64X Length %08lX Irp Flags %08lX\n",
                           Irp,
                           liStartingByte.QuadPart,
                           ulByteCount,
@@ -949,7 +941,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSCommonRead (%08lX) Request failed due to AFS cache closed\n",
+                          "AFSCommonRead (%p) Request failed due to AFS cache closed\n",
                           Irp);
 
             try_return( ntStatus = STATUS_TOO_LATE );
@@ -960,7 +952,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Request completed due to zero length\n",
+                          "AFSCommonRead (%p) Request completed due to zero length\n",
                           Irp);
 
             try_return( ntStatus);
@@ -969,9 +961,20 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
         if ( FlagOn(pIrpSp->MinorFunction, IRP_MN_COMPLETE) )
         {
 
+            AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+                          AFS_TRACE_LEVEL_VERBOSE,
+                          "AFSCommonRead Acquiring Fcb SectionObject lock %p SHARED %08lX\n",
+                          &pFcb->NPFcb->SectionObjectResource,
+                          PsGetCurrentThread());
+
+            AFSAcquireShared( &pFcb->NPFcb->SectionObjectResource,
+                              TRUE);
+
+            bReleaseSectionObject = TRUE;
+
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) IRP_MN_COMPLETE being processed\n",
+                          "AFSCommonRead (%p) IRP_MN_COMPLETE being processed\n",
                           Irp);
 
             CcMdlReadComplete(pIrpSp->FileObject, Irp->MdlAddress);
@@ -996,21 +999,6 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
         }
 
         //
-        // Setup the calling process
-        //
-
-        if( NULL == OnBehalfOf)
-        {
-
-            hCallingUser = PsGetCurrentProcessId();
-        }
-        else
-        {
-
-            hCallingUser = OnBehalfOf;
-        }
-
-        //
         // We acquire the main/paging resource first to synchronize
         // against size checks.
         //
@@ -1020,28 +1008,40 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead Acquiring Fcb PagingIo lock %08lX SHARED %08lX\n",
-                                                              &pFcb->NPFcb->PagingResource,
-                                                              PsGetCurrentThread());
+                          "AFSCommonRead Acquiring Fcb PagingIo lock %p SHARED %08lX\n",
+                          &pFcb->NPFcb->PagingResource,
+                          PsGetCurrentThread());
 
             AFSAcquireShared( &pFcb->NPFcb->PagingResource,
                               TRUE);
 
             bReleasePaging = TRUE;
+
+            AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+                          AFS_TRACE_LEVEL_VERBOSE,
+                          "AFSCommonRead Acquiring Fcb SectionObject lock %p SHARED %08lX\n",
+                          &pFcb->NPFcb->SectionObjectResource,
+                          PsGetCurrentThread());
+
+            AFSAcquireShared( &pFcb->NPFcb->SectionObjectResource,
+                              TRUE);
+
+            bReleaseSectionObject = TRUE;
+
         }
         else
         {
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead Acquiring Fcb lock %08lX SHARED %08lX\n",
-                                                              &pFcb->NPFcb->Resource,
-                                                              PsGetCurrentThread());
+                          "AFSCommonRead Acquiring Fcb SectionObject lock %p SHARED %08lX\n",
+                          &pFcb->NPFcb->SectionObjectResource,
+                          PsGetCurrentThread());
 
-            AFSAcquireShared( &pFcb->NPFcb->Resource,
+            AFSAcquireShared( &pFcb->NPFcb->SectionObjectResource,
                               TRUE);
 
-            bReleaseMain = TRUE;
+            bReleaseSectionObject = TRUE;
 
             //
             // Check the BR locks
@@ -1053,7 +1053,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                               AFS_TRACE_LEVEL_ERROR,
-                              "AFSCommonRead (%08lX) Request failed due to lock conflict\n",
+                              "AFSCommonRead (%p) Request failed due to lock conflict\n",
                               Irp);
 
                 try_return( ntStatus = STATUS_FILE_LOCK_CONFLICT);
@@ -1066,7 +1066,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSCommonRead (%08lX) Request failed due to file deleted\n",
+                          "AFSCommonRead (%p) Request failed due to file deleted\n",
                           Irp);
 
             try_return( ntStatus = STATUS_FILE_DELETED);
@@ -1081,7 +1081,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Request beyond EOF %I64X\n",
+                          "AFSCommonRead (%p) Request beyond EOF %I64X\n",
                           Irp,
                           pFcb->Header.FileSize.QuadPart);
 
@@ -1098,7 +1098,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Truncated read request to %08lX\n",
+                          "AFSCommonRead (%p) Truncated read request to %08lX\n",
                           Irp,
                           ulByteCount);
         }
@@ -1112,7 +1112,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSCommonRead (%08lX) Failing request due to INVALID fcb\n",
+                          "AFSCommonRead (%p) Failing request due to INVALID fcb\n",
                           Irp);
 
             Irp->IoStatus.Information = 0;
@@ -1121,55 +1121,6 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
         }
 
         //
-        // Save off the PID if this is not a paging IO
-        //
-#if 0
-        if( !bPagingIo &&
-            ( pFcb->Specific.File.ExtentProcessId == 0 ||
-              ( PsGetCurrentProcessId() != AFSSysProcess &&
-                pFcb->Specific.File.ExtentProcessId != (ULONGLONG)PsGetCurrentProcessId())))
-        {
-
-            pFcb->Specific.File.ExtentProcessId = (ULONGLONG)PsGetCurrentProcessId();
-
-            if( pFcb->Specific.File.ExtentProcessId == (ULONGLONG)AFSSysProcess)
-            {
-                AFSDbgLogMsg( AFS_SUBSYSTEM_EXTENT_PROCESSING,
-                              AFS_TRACE_LEVEL_WARNING,
-                              "%s Setting ExtentProcessId to system process for Fcb %p\n",
-                                            __FUNCTION__,
-                                            pFcb);
-            }
-
-            pFcb->Specific.File.ExtentThreadId = (ULONGLONG)PsGetCurrentThreadId();
-        }
-#endif
-
-        //
-        // If this is going to be posted OR this is a cached read,
-        // then ask for the extents before we post.
-        //
-        /*
-        if( !bPagingIo && !bNonCachedIo)
-        {
-
-            ntStatus = AFSRequestExtentsAsync( pFcb, pCcb, &liStartingByte, ulByteCount);
-
-            if (!NT_SUCCESS(ntStatus))
-            {
-
-                AFSDbgLogMsg( AFS_SUBSYSTEM_EXTENT_PROCESSING,
-                              AFS_TRACE_LEVEL_ERROR,
-                              "AFSCommonRead (%08lX) Failed to request extents Status %08lX\n",
-                              Irp,
-                              ntStatus);
-
-                try_return( ntStatus );
-            }
-        }
-        */
-
-        //
         // If this is an cached IO
         //
         if( (!bPagingIo && !bNonCachedIo))
@@ -1187,9 +1138,9 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                                   AFS_TRACE_LEVEL_VERBOSE,
-                                  "AFSCommonRead Initialize caching on Fcb %08lX FO %08lX\n",
-                                      pFcb,
-                                      pFileObject);
+                                  "AFSCommonRead Initialize caching on Fcb %p FO %p\n",
+                                  pFcb,
+                                  pFileObject);
 
                     CcInitializeCacheMap( pFileObject,
                                           (PCC_FILE_SIZES)&pFcb->Header.AllocationSize,
@@ -1201,7 +1152,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
                                                pDeviceExt->Specific.RDR.MaximumRPCLength);
 
                     CcSetDirtyPageThreshold( pFileObject,
-                                             AFS_DIRTY_CHUNK_THRESHOLD * pDeviceExt->Specific.RDR.MaximumRPCLength);
+                                             AFS_DIRTY_CHUNK_THRESHOLD * pDeviceExt->Specific.RDR.MaximumRPCLength / 4096);
                 }
                 __except( EXCEPTION_EXECUTE_HANDLER)
                 {
@@ -1210,7 +1161,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSCommonRead (%08lX) Exception thrown while initializing cache map Status %08lX\n",
+                                  "AFSCommonRead (%p) Exception thrown while initializing cache map Status %08lX\n",
                                   Irp,
                                   ntStatus);
                 }
@@ -1246,7 +1197,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSCachedWrite (%08lX) Exception thrown during mdl read Status %08lX\n",
+                                  "AFSCommonRead (%p) Exception thrown during mdl read Status %08lX\n",
                                   Irp,
                                   ntStatus);
                 }
@@ -1256,7 +1207,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                                   AFS_TRACE_LEVEL_ERROR,
-                                  "AFSCommonRead (%08lX) Failed to process MDL read Status %08lX\n",
+                                  "AFSCommonRead (%p) Failed to process MDL read Status %08lX\n",
                                   Irp,
                                   ntStatus);
 
@@ -1289,7 +1240,7 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Processing CACHED request Offset %I64X Len %08lX\n",
+                          "AFSCommonRead (%p) Processing CACHED request Offset %I64X Len %08lX\n",
                           Irp,
                           liStartingByte.QuadPart,
                           ulByteCount);
@@ -1299,9 +1250,33 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
         else
         {
 
+            if( bReleasePaging)
+            {
+
+                AFSReleaseResource( &pFcb->NPFcb->PagingResource);
+
+                bReleasePaging = FALSE;
+            }
+
+            if( bReleaseSectionObject)
+            {
+
+                AFSReleaseResource( &pFcb->NPFcb->SectionObjectResource);
+
+                bReleaseSectionObject = FALSE;
+            }
+
+            if( bReleaseMain)
+            {
+
+                AFSReleaseResource( &pFcb->NPFcb->Resource);
+
+                bReleaseMain = FALSE;
+            }
+
             AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                           AFS_TRACE_LEVEL_VERBOSE,
-                          "AFSCommonRead (%08lX) Processing NON-CACHED request Offset %I64X Len %08lX\n",
+                          "AFSCommonRead (%p) Processing NON-CACHED request Offset %I64X Len %08lX\n",
                           Irp,
                           liStartingByte.QuadPart,
                           ulByteCount);
@@ -1309,28 +1284,11 @@ AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
             ntStatus = AFSNonCachedRead( DeviceObject, Irp,  liStartingByte);
         }
 
-        //
-        // We won't do this for now in read processing ...
-
-#if 0
-        //
-        // Queue up a flush
-        //
-
-        if( pFcb->Specific.File.ExtentsDirtyCount > 0 ||
-            pFcb->Specific.File.ExtentLength > 1500)
-        {
-
-            AFSQueueFlushExtents( pFcb,
-                                  &pCcb->AuthGroup);
-        }
-#endif
-
 try_exit:
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_IO_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSCommonRead (%08lX) Process complete Status %08lX\n",
+                      "AFSCommonRead (%p) Process complete Status %08lX\n",
                       Irp,
                       ntStatus);
 
@@ -1340,6 +1298,12 @@ try_exit:
             AFSReleaseResource( &pFcb->NPFcb->PagingResource);
         }
 
+        if( bReleaseSectionObject)
+        {
+
+            AFSReleaseResource( &pFcb->NPFcb->SectionObjectResource);
+        }
+
         if( bReleaseMain)
         {
 
@@ -1363,6 +1327,7 @@ AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
               IN PIRP Irp)
 {
 
+    UNREFERENCED_PARAMETER(DeviceObject);
     NTSTATUS ntStatus = STATUS_SUCCESS;
     AFSPIOCtlIORequestCB stIORequestCB;
     PIO_STACK_LOCATION pIrpSp = IoGetCurrentIrpStackLocation( Irp);
@@ -1394,7 +1359,7 @@ AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
 
         AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
                       AFS_TRACE_LEVEL_VERBOSE,
-                      "AFSIOCtlRead Acquiring Fcb lock %08lX SHARED %08lX\n",
+                      "AFSIOCtlRead Acquiring Fcb lock %p SHARED %08lX\n",
                       &pFcb->NPFcb->Resource,
                       PsGetCurrentThread());
 
@@ -1408,16 +1373,14 @@ AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
         RtlZeroMemory( &stParentFID,
                        sizeof( AFSFileID));
 
-        if( pFcb->ObjectInformation->ParentObjectInformation != NULL)
+        if( BooleanFlagOn( pFcb->ObjectInformation->Flags, AFS_OBJECT_FLAGS_PARENT_FID))
         {
 
             //
             // The parent directory FID of the node
             //
 
-            ASSERT( pFcb->ObjectInformation->ParentObjectInformation->FileType == AFS_FILE_TYPE_DIRECTORY);
-
-            stParentFID = pFcb->ObjectInformation->ParentObjectInformation->FileId;
+            stParentFID = pFcb->ObjectInformation->ParentFileId;
         }
 
         //
@@ -1500,8 +1463,8 @@ AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
               IN PIRP Irp)
 {
 
+    UNREFERENCED_PARAMETER(DeviceObject);
     NTSTATUS ntStatus = STATUS_SUCCESS;
-    AFSPIOCtlIORequestCB stIORequestCB;
     PIO_STACK_LOCATION pIrpSp = IoGetCurrentIrpStackLocation( Irp);
     AFSFcb *pFcb = NULL;
     AFSCcb *pCcb = NULL;
@@ -1584,7 +1547,7 @@ AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
 
             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
                           AFS_TRACE_LEVEL_ERROR,
-                          "AFSShareRead (%08lX) Failed service read Status %08lX\n",
+                          "AFSShareRead (%p) Failed service read Status %08lX\n",
                           Irp,
                           ntStatus);