Fix MmAllocatePageForMdl when it cannot allocate as much memory as requested.
Modified: trunk/reactos/ntoskrnl/mm/mdl.c

Modified: trunk/reactos/ntoskrnl/mm/mdl.c
--- trunk/reactos/ntoskrnl/mm/mdl.c	2005-01-14 14:11:13 UTC (rev 13041)
+++ trunk/reactos/ntoskrnl/mm/mdl.c	2005-01-14 14:47:03 UTC (rev 13042)
@@ -637,10 +637,9 @@
       memory. When a driver wants to access physical memory described by a
       sub-MDL it must map the sub-MDL using MmGetSystemAddressForMdlSafe.
    
-    Konstantin Gusev
+      Konstantin Gusev
+      */
    
-*/
-   
    PMDL Mdl;
    PPFN_TYPE Pages;
    ULONG NumberOfPagesWanted, NumberOfPagesAllocated;
@@ -652,7 +651,11 @@
           SkipBytes.QuadPart, Totalbytes);
    
    /* SkipBytes must be a multiple of the page size */
-   ASSERT((SkipBytes.QuadPart % PAGE_SIZE) == 0);
+   if ((SkipBytes.QuadPart % PAGE_SIZE) != 0)
+   {
+      DPRINT1("Warning: SkipBytes is not a multiple of PAGE_SIZE\n");
+      return NULL;
+   }
 
    /* Allocate memory for the MDL */
    Mdl = MmCreateMdl(NULL, 0, Totalbytes);
@@ -690,6 +693,11 @@
       ExFreePool(Mdl);
       Mdl = NULL;
    }
+   else if (NumberOfPagesWanted > 0)
+   {
+      Mdl->ByteCount = (ULONG)(NumberOfPagesAllocated * PAGE_SIZE);
+      /* FIXME: I don't know if Mdl->Size should also be changed -- blight */
+   }
    return Mdl;
 }