[FASTFAT]
authorPierre Schweitzer <pierre@reactos.org>
Sun, 17 May 2015 12:22:28 +0000 (12:22 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 17 May 2015 12:22:28 +0000 (12:22 +0000)
Fix a fixme in VfatGetUserBuffer():
Only request high priority page when in the paging path. Otherwise, request normal priority

svn path=/trunk/; revision=67808

reactos/drivers/filesystems/fastfat/dir.c
reactos/drivers/filesystems/fastfat/misc.c
reactos/drivers/filesystems/fastfat/rw.c
reactos/drivers/filesystems/fastfat/vfat.h

index 69c08db..41bcf37 100644 (file)
@@ -419,7 +419,7 @@ DoQuery(
         ProbeForWrite(IrpContext->Irp->UserBuffer, BufferLength, 1);
     }
 #endif
-    Buffer = VfatGetUserBuffer(IrpContext->Irp);
+    Buffer = VfatGetUserBuffer(IrpContext->Irp, FALSE);
 
     if (!ExAcquireResourceSharedLite(&pFcb->MainResource,
                                      (BOOLEAN)(IrpContext->Flags & IRPCONTEXT_CANWAIT)))
index 47951ab..1e97d7a 100644 (file)
@@ -327,15 +327,14 @@ VfatQueueRequest(
 
 PVOID
 VfatGetUserBuffer(
-    IN PIRP Irp)
+    IN PIRP Irp,
+    IN BOOLEAN Paging)
 {
     ASSERT(Irp);
 
     if (Irp->MdlAddress)
     {
-        /* This call may be in the paging path, so use maximum priority */
-        /* FIXME: call with normal priority in the non-paging path */
-        return MmGetSystemAddressForMdlSafe(Irp->MdlAddress, HighPagePriority);
+        return MmGetSystemAddressForMdlSafe(Irp->MdlAddress, (Paging ? HighPagePriority : NormalPagePriority));
     }
     else
     {
index a8d2a62..7a3d610 100644 (file)
@@ -655,7 +655,7 @@ VfatRead(
         }
     }
 
-    Buffer = VfatGetUserBuffer(IrpContext->Irp);
+    Buffer = VfatGetUserBuffer(IrpContext->Irp, IrpContext->Irp->Flags & IRP_PAGING_IO);
     if (!Buffer)
     {
         Status = STATUS_INVALID_USER_BUFFER;
@@ -926,7 +926,7 @@ VfatWrite(
 
     OldFileSize = Fcb->RFCB.FileSize;
 
-    Buffer = VfatGetUserBuffer(IrpContext->Irp);
+    Buffer = VfatGetUserBuffer(IrpContext->Irp, IrpContext->Irp->Flags & IRP_PAGING_IO);
     if (!Buffer)
     {
         Status = STATUS_INVALID_USER_BUFFER;
index 0266983..bc6ac51 100644 (file)
@@ -928,7 +928,8 @@ VfatBuildRequest(
 
 PVOID
 VfatGetUserBuffer(
-    IN PIRP);
+    IN PIRP,
+    IN BOOLEAN Paging);
 
 NTSTATUS
 VfatLockUserBuffer(