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