Windows: Skip Extent operations if Direct IO
[openafs.git] / src / WINNT / afsrdr / kernel / lib / AFSWorker.cpp
index 31dc7de..f42860c 100644 (file)
@@ -653,6 +653,7 @@ AFSWorkerThread( IN PVOID Context)
     AFSWorkItem *pWorkItem;
     BOOLEAN freeWorkItem = TRUE;
     AFSDeviceExt *pControlDevExt = NULL;
+    AFSDeviceExt *pRDRDevExt = (AFSDeviceExt *) AFSRDRDeviceObject->DeviceExtension;
     LONG lCount;
 
     pControlDevExt = (AFSDeviceExt *)AFSControlDeviceObject->DeviceExtension;
@@ -719,18 +720,21 @@ AFSWorkerThread( IN PVOID Context)
                     case AFS_WORK_FLUSH_FCB:
                     {
 
-                        ntStatus = AFSFlushExtents( pWorkItem->Specific.Fcb.Fcb,
-                                                    &pWorkItem->AuthGroup);
+                       if( !BooleanFlagOn( pRDRDevExt->DeviceFlags, AFS_DEVICE_FLAG_DIRECT_SERVICE_IO))
+                       {
+                           ntStatus = AFSFlushExtents( pWorkItem->Specific.Fcb.Fcb,
+                                                       &pWorkItem->AuthGroup);
 
-                        if( !NT_SUCCESS( ntStatus))
-                        {
+                           if( !NT_SUCCESS( ntStatus))
+                           {
 
-                            AFSReleaseExtentsWithFlush( pWorkItem->Specific.Fcb.Fcb,
-                                                        &pWorkItem->AuthGroup,
-                                                        FALSE);
-                        }
+                               AFSReleaseExtentsWithFlush( pWorkItem->Specific.Fcb.Fcb,
+                                                           &pWorkItem->AuthGroup,
+                                                           FALSE);
+                           }
+                       }
 
-                        ASSERT( pWorkItem->Specific.Fcb.Fcb->OpenReferenceCount != 0);
+                       ASSERT( pWorkItem->Specific.Fcb.Fcb->OpenReferenceCount != 0);
 
                         lCount = InterlockedDecrement( &pWorkItem->Specific.Fcb.Fcb->OpenReferenceCount);