Author: mbosma
Date: Thu Jul 20 10:58:07 2006
New Revision: 23187
URL:
http://svn.reactos.org/svn/reactos?rev=23187&view=rev
Log:
- Only lock a FileObject using the Lock member for synchronous I/O.
- Hardcode the sector size to 512
Thanks to Filip
Modified:
branches/cache_manager_rewrite/mm/section.c
Modified: branches/cache_manager_rewrite/mm/section.c
URL:
http://svn.reactos.org/svn/reactos/branches/cache_manager_rewrite/mm/sectio…
==============================================================================
--- branches/cache_manager_rewrite/mm/section.c (original)
+++ branches/cache_manager_rewrite/mm/section.c Thu Jul 20 10:58:07 2006
@@ -175,7 +175,10 @@
static NTSTATUS
MmspWaitForFileLock(PFILE_OBJECT File)
{
- return KeWaitForSingleObject(&File->Lock, 0, KernelMode, FALSE, NULL);
+ if(File->Flags & FO_SYNCHRONOUS_IO)
+ return KeWaitForSingleObject(&File->Lock, 0, KernelMode, FALSE, NULL);
+ else
+ return 0;
}
@@ -900,20 +903,16 @@
ULONG Consumer)
{
NTSTATUS Status;
- ULONG SectorSize;
LARGE_INTEGER FileOffset;
- ULONG Length, ReturnedLength;
-
+ ULONG Length;
+
+ ASSERT(SegOffset % 512 == 0);
+ ASSERT(SectionData->Segment->FileOffset % 512 == 0);
+
Status = MmspRequestPages(PageCount, Pages, Consumer);
if (!NT_SUCCESS(Status))
{
return Status;
- }
-
- SectorSize = SectionData->Segment->BytesPerSector;
- if (SectorSize == 0)
- {
- SectorSize = 512;
}
FileOffset.QuadPart = SegOffset + SectionData->Segment->FileOffset;
@@ -922,46 +921,18 @@
{
KEBUGCHECK(0);
}
- if (Length + SegOffset > SectionData->Segment->RawLength)
- {
- Length = SectionData->Segment->RawLength - SegOffset;
- }
-
Status = MmspRawReadPages(SectionData->Section->FileObject,
- SectorSize,
+ 512,
&FileOffset,
Length,
Pages);
- if (!NT_SUCCESS(Status) && SectionData->Segment->BytesPerSector == 0)
- {
- NTSTATUS tmpStatus;
- FILE_FS_SIZE_INFORMATION FileFsSize;
-
- tmpStatus = IoQueryVolumeInformation(SectionData->Section->FileObject,
- FileFsSizeInformation,
- sizeof(FILE_FS_SIZE_INFORMATION),
- &FileFsSize,
- &ReturnedLength);
-
- if (NT_SUCCESS(tmpStatus))
- {
- DPRINT("%d\n", FileFsSize.BytesPerSector);
- SectionData->Segment->BytesPerSector = FileFsSize.BytesPerSector;
- if (FileFsSize.BytesPerSector != 512)
- {
- Status = MmspRawReadPages(SectionData->Section->FileObject,
- FileFsSize.BytesPerSector,
- &FileOffset,
- PageCount * PAGE_SIZE,
- Pages);
- }
- }
- }
+
if (!NT_SUCCESS(Status))
{
MmspReleasePages(PageCount, Pages, Consumer);
}
+
return Status;
}
@@ -3661,7 +3632,8 @@
Section->MaximumSize = MaximumSize;
ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&DataSectionObjectLock);
// CcRosReferenceCache(FileObject);
- KeSetEvent((PVOID)&FileObject->Lock, IO_NO_INCREMENT, FALSE);
+ if(FileObject->Flags & FO_SYNCHRONOUS_IO)
+ KeSetEvent((PVOID)&FileObject->Lock, IO_NO_INCREMENT, FALSE);
*SectionObject = Section;
return(STATUS_SUCCESS);
}
@@ -4527,7 +4499,8 @@
}
Section->FileObject = FileObject;
// CcRosReferenceCache(FileObject);
- KeSetEvent((PVOID)&FileObject->Lock, IO_NO_INCREMENT, FALSE);
+ if(FileObject->Flags & FO_SYNCHRONOUS_IO)
+ KeSetEvent((PVOID)&FileObject->Lock, IO_NO_INCREMENT, FALSE);
*SectionObject = Section;
DPRINT("%x\n", Section->AllocationAttributes);
return STATUS_SUCCESS;