[ros-dev] ext2 status (a bit long)

Hartmut Birr hartmut.birr at gmx.de
Thu Jan 20 20:44:40 CET 2005


Hi,

I've merged the ext2, usetup and freeldr files in my local source tree. 
If I start the installation, I get crash at the begin of the copy process:

...
    *** Attempting to acquire FCBpaging Exclusively [Write]  IRQL = 0    
[src/write.c] Line No = 463
    *** FCBpaging Acquired [Write]  IRQL = 0    [src/write.c] Line No = 473
    [File Write] Paging IO or NonBufferedIo   IRQL = 0    [src/write.c] 
Line No = 777
   
Determining the write IRPs that have to be passed down...  IRQL = 0    
[src/write.c] Line No = 1250
      Index = (11)  IRQL = 0    [src/write.c] Line No = 1317
      Logical Block = (0x538F)  IRQL = 0    [src/write.c] Line No = 1318
      Start = (0x307)  IRQL = 0    [src/write.c] Line No = 1319
      End = (0x1000)    IRQL = 0    [src/write.c] Line No = 1320
      Bytes written (0xCF9)  IRQL = 0    [src/write.c] Line No = 1321
    Passing down the Write IRPs to the disk driver...  IRQL = 0    
[src/write.c] Line No = 1358PASSING DOWN IRP 0 TO TARGET DEVICE
DEADLY WAIT (0)

    Freeing  = C05FC498 [io]  IRQL = 2    [src/io.c] Line No = 
486Assertion Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA failed at mm/mdl.c:246
Bug detected (code 0 param 0 0 0 0)
  The bug code is undefined. Please use an existing code instead.

Frames: <ntoskrnl.exe: bdee>
<ntoskrnl.exe: be26>
<ntoskrnl.exe: 5a6cc>
<ntoskrnl.exe: 41677>
<ntoskrnl.exe: 40662>
<ntoskrnl.exe: 408cc>
<scsiport.sys: 49f9>
<scsiport.sys: 38ac>
<ntoskrnl.exe: c8ce>
<hal.dll: 40e8>
<hal.dll: 43db>
<ntoskrnl.exe: 262e>
<ntoskrnl.exe: 2edb>
<ntoskrnl.exe: 3690>

I think that the buffer locking is wrong for the partial mdls. I've 
changed this a little bit:

--- E:\Sandbox\ros_ext2\ext2\reactos\drivers\fs\ext2\src\io.c    Thu Jan 
20 20:17:44 2005
+++ E:\Sandbox\ros_mp\reactos\drivers\fs\ext2\src\io.c    Thu Jan 20 
20:05:32 2005
@@ -50,6 +50,7 @@
     PKEVENT                PtrSyncEvent = NULL;
     ULONG                LogicalBlockSize;
     ULONG                ReadWriteLength;
+    PVOID Buffer;
 
     NTSTATUS RC = STATUS_SUCCESS;
 
@@ -69,6 +70,8 @@
         {
             Ext2LockCallersBuffer( PtrMasterIrp, TRUE, 
TotalReadWriteLength );
         }
+        MmGetSystemAddressForMdlSafe(PtrMasterIrp->MdlAddress, 
HighPagePriority);
+        Buffer = MmGetMdlVirtualAddress(PtrMasterIrp->MdlAddress);
 
         if( SynchronousIo )
         {
@@ -117,14 +120,14 @@
             //
             //    Allocating a Memory Descriptor List...
             //
-            PtrMdl = IoAllocateMdl( (PCHAR) PtrMasterIrp->UserBuffer + 
BufferOffset, //    Virtual Address
+            PtrMdl = IoAllocateMdl( (PCHAR) 
/*PtrMasterIrp->UserBuffer*/Buffer + BufferOffset, //    Virtual Address
                 ReadWriteLength,    FALSE, FALSE, PtrAssociatedIrp );
            
             //
             //    and building a partial MDL...
             //
             IoBuildPartialMdl( PtrMasterIrp->MdlAddress,
-                PtrMdl, (PCHAR)PtrMasterIrp->UserBuffer + BufferOffset, 
ReadWriteLength );
+                PtrMdl, /*(PCHAR)PtrMasterIrp->UserBuffer*/Buffer + 
BufferOffset, ReadWriteLength );
 
             //
             //    Create an Irp stack location for ourselves...

The installer starts the copy process. After some files (#125, 
rpcrt4.dll), ros does crash anywher in the cache manager. My test 
machine is PIII 550MHz with an adaptec scsi controller. I do not use the 
atapi driver.

- Hartmut



More information about the Ros-dev mailing list