mirror of
https://github.com/reactos/reactos.git
synced 2024-07-27 14:49:22 +00:00
Moved IoPageRead from io.h to iofuncs.h.
Changed parameters for IoPageRead/IoPageWrite/IoSynchronousPageWrite. Fixed the length calculation in CcZeroData. svn path=/trunk/; revision=3421
This commit is contained in:
parent
fdd13c6ff5
commit
1b9c730b99
|
@ -1,6 +1,6 @@
|
|||
#ifndef _INCLUDE_DDK_IOFUNCS_H
|
||||
#define _INCLUDE_DDK_IOFUNCS_H
|
||||
/* $Id: iofuncs.h,v 1.30 2002/04/10 09:55:10 ekohl Exp $ */
|
||||
/* $Id: iofuncs.h,v 1.31 2002/08/28 07:13:04 hbirr Exp $ */
|
||||
|
||||
/* --- EXPORTED BY NTOSKRNL --- */
|
||||
|
||||
|
@ -1031,15 +1031,21 @@ STDCALL
|
|||
IoStopTimer (
|
||||
PDEVICE_OBJECT DeviceObject
|
||||
);
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
IoSynchronousPageWrite (
|
||||
DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2,
|
||||
DWORD Unknown3,
|
||||
DWORD Unknown4
|
||||
);
|
||||
|
||||
NTSTATUS STDCALL
|
||||
IoPageRead(PFILE_OBJECT FileObject,
|
||||
PMDL Mdl,
|
||||
PLARGE_INTEGER Offset,
|
||||
PKEVENT Event,
|
||||
PIO_STATUS_BLOCK StatusBlock);
|
||||
|
||||
NTSTATUS STDCALL
|
||||
IoSynchronousPageWrite (PFILE_OBJECT FileObject,
|
||||
PMDL Mdl,
|
||||
PLARGE_INTEGER Offset,
|
||||
PKEVENT Event,
|
||||
PIO_STATUS_BLOCK StatusBlock);
|
||||
|
||||
struct _EPROCESS* STDCALL IoThreadToProcess (struct _ETHREAD* Thread);
|
||||
VOID
|
||||
STDCALL
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: copy.c,v 1.9 2002/08/17 15:14:26 hbirr Exp $
|
||||
/* $Id: copy.c,v 1.10 2002/08/28 07:13:04 hbirr Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -60,6 +60,7 @@ ReadCacheSegmentChain(PBCB Bcb, ULONG ReadOffset, ULONG Length,
|
|||
LARGE_INTEGER SegOffset;
|
||||
NTSTATUS Status;
|
||||
ULONG TempLength;
|
||||
KEVENT Event;
|
||||
|
||||
Status = CcRosGetCacheSegmentChain(Bcb, ReadOffset, Length, &head);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
@ -131,11 +132,17 @@ ReadCacheSegmentChain(PBCB Bcb, ULONG ReadOffset, ULONG Length,
|
|||
* Read in the information.
|
||||
*/
|
||||
SegOffset.QuadPart = current->FileOffset;
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageRead(Bcb->FileObject,
|
||||
Mdl,
|
||||
&SegOffset,
|
||||
&Iosb,
|
||||
TRUE);
|
||||
&Event,
|
||||
&Iosb);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = Iosb.Status;
|
||||
}
|
||||
if (!NT_SUCCESS(Status) && Status != STATUS_END_OF_FILE)
|
||||
{
|
||||
while (current != NULL)
|
||||
|
@ -169,6 +176,7 @@ ReadCacheSegment(PCACHE_SEGMENT CacheSeg)
|
|||
NTSTATUS Status;
|
||||
LARGE_INTEGER SegOffset;
|
||||
IO_STATUS_BLOCK IoStatus;
|
||||
KEVENT Event;
|
||||
|
||||
SegOffset.QuadPart = CacheSeg->FileOffset;
|
||||
Size = CacheSeg->Bcb->AllocationSize.QuadPart - CacheSeg->FileOffset;
|
||||
|
@ -178,8 +186,14 @@ ReadCacheSegment(PCACHE_SEGMENT CacheSeg)
|
|||
}
|
||||
Mdl = MmCreateMdl(NULL, CacheSeg->BaseAddress, Size);
|
||||
MmBuildMdlForNonPagedPool(Mdl);
|
||||
Status = IoPageRead(CacheSeg->Bcb->FileObject, Mdl, &SegOffset, &IoStatus,
|
||||
TRUE);
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageRead(CacheSeg->Bcb->FileObject, Mdl, &SegOffset, & Event, &IoStatus);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = IoStatus.Status;
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(Status) && Status != STATUS_END_OF_FILE)
|
||||
{
|
||||
CcRosReleaseCacheSegment(CacheSeg->Bcb, CacheSeg, FALSE, FALSE, FALSE);
|
||||
|
@ -202,6 +216,7 @@ WriteCacheSegment(PCACHE_SEGMENT CacheSeg)
|
|||
NTSTATUS Status;
|
||||
IO_STATUS_BLOCK IoStatus;
|
||||
LARGE_INTEGER SegOffset;
|
||||
KEVENT Event;
|
||||
|
||||
CacheSeg->Dirty = FALSE;
|
||||
SegOffset.QuadPart = CacheSeg->FileOffset;
|
||||
|
@ -212,8 +227,13 @@ WriteCacheSegment(PCACHE_SEGMENT CacheSeg)
|
|||
}
|
||||
Mdl = MmCreateMdl(NULL, CacheSeg->BaseAddress, Size);
|
||||
MmBuildMdlForNonPagedPool(Mdl);
|
||||
Status = IoPageWrite(CacheSeg->Bcb->FileObject, Mdl, &SegOffset, &IoStatus,
|
||||
TRUE);
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageWrite(CacheSeg->Bcb->FileObject, Mdl, &SegOffset, &Event, &IoStatus);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = IoStatus.Status;
|
||||
}
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("IoPageWrite failed, Status %x\n", Status);
|
||||
|
@ -444,6 +464,7 @@ CcZeroData (IN PFILE_OBJECT FileObject,
|
|||
PMDL Mdl;
|
||||
ULONG i;
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
KEVENT Event;
|
||||
|
||||
DPRINT("CcZeroData(FileObject %x, StartOffset %I64x, EndOffset %I64x, "
|
||||
"Wait %d\n", FileObject, StartOffset->QuadPart, EndOffset->QuadPart,
|
||||
|
@ -487,7 +508,13 @@ CcZeroData (IN PFILE_OBJECT FileObject,
|
|||
{
|
||||
((PULONG)(Mdl + 1))[i] = CcZeroPage.u.LowPart;
|
||||
}
|
||||
Status = IoPageWrite(FileObject, Mdl, StartOffset, &Iosb, TRUE);
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageWrite(FileObject, Mdl, StartOffset, &Event, &Iosb);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = Iosb.Status;
|
||||
}
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return(FALSE);
|
||||
|
@ -558,16 +585,13 @@ CcZeroData (IN PFILE_OBJECT FileObject,
|
|||
else
|
||||
{
|
||||
ULONG RLength;
|
||||
Mdl = MmCreateMdl(NULL, (PVOID)RStart,
|
||||
ROUND_UP(Start % Bcb->CacheSegmentSize +
|
||||
Length, Bcb->CacheSegmentSize));
|
||||
RLength = Start % Bcb->CacheSegmentSize + Length;
|
||||
RLength = ROUND_UP(RLength, Bcb->CacheSegmentSize);
|
||||
Mdl = MmCreateMdl(NULL, (PVOID)RStart, RLength);
|
||||
if (Mdl == NULL)
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
RLength = ROUND_UP(RStart + Length, Bcb->CacheSegmentSize);
|
||||
RLength = min(RLength, Bcb->AllocationSize.u.LowPart);
|
||||
RLength -= RStart;
|
||||
Status = CcRosGetCacheSegmentChain (Bcb, RStart, RLength,
|
||||
&CacheSeg);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
@ -622,7 +646,13 @@ CcZeroData (IN PFILE_OBJECT FileObject,
|
|||
}
|
||||
|
||||
/* Write the Segment */
|
||||
Status = IoPageWrite(FileObject, Mdl, &WriteOffset, &Iosb, TRUE);
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageWrite(FileObject, Mdl, &WriteOffset, &Event, &Iosb);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = Iosb.Status;
|
||||
}
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("IoPageWrite failed, status %x\n", Status);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: io.h,v 1.22 2002/06/12 23:28:38 ekohl Exp $
|
||||
/* $Id: io.h,v 1.23 2002/08/28 07:13:04 hbirr Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -302,17 +302,11 @@ VOID IoShutdownRegisteredDevices(VOID);
|
|||
VOID IoShutdownRegisteredFileSystems(VOID);
|
||||
|
||||
NTSTATUS STDCALL
|
||||
IoPageRead(PFILE_OBJECT FileObject,
|
||||
PMDL Mdl,
|
||||
PLARGE_INTEGER Offset,
|
||||
PIO_STATUS_BLOCK StatusBlock,
|
||||
BOOLEAN PagingIo);
|
||||
NTSTATUS STDCALL
|
||||
IoPageWrite(PFILE_OBJECT FileObject,
|
||||
PMDL Mdl,
|
||||
PLARGE_INTEGER Offset,
|
||||
PIO_STATUS_BLOCK StatusBlock,
|
||||
BOOLEAN PagingIo);
|
||||
IoPageWrite(PFILE_OBJECT FileObject,
|
||||
PMDL Mdl,
|
||||
PLARGE_INTEGER Offset,
|
||||
PKEVENT Event,
|
||||
PIO_STATUS_BLOCK StatusBlock);
|
||||
|
||||
NTSTATUS
|
||||
IoCreateArcNames(VOID);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: pagefile.c,v 1.23 2002/08/17 01:42:02 dwelch Exp $
|
||||
/* $Id: pagefile.c,v 1.24 2002/08/28 07:13:04 hbirr Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/mm/pagefile.c
|
||||
|
@ -125,6 +125,7 @@ NTSTATUS MmWriteToSwapPage(SWAPENTRY SwapEntry, PMDL Mdl)
|
|||
LARGE_INTEGER file_offset;
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
NTSTATUS Status;
|
||||
KEVENT Event;
|
||||
|
||||
if (SwapEntry == 0)
|
||||
{
|
||||
|
@ -148,12 +149,17 @@ NTSTATUS MmWriteToSwapPage(SWAPENTRY SwapEntry, PMDL Mdl)
|
|||
}
|
||||
|
||||
file_offset.QuadPart = offset * 4096;
|
||||
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageWrite(PagingFileList[i]->FileObject,
|
||||
Mdl,
|
||||
&file_offset,
|
||||
&Iosb,
|
||||
TRUE);
|
||||
&Event,
|
||||
&Iosb);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
return(Iosb.Status);
|
||||
}
|
||||
return(Status);
|
||||
}
|
||||
|
||||
|
@ -163,6 +169,7 @@ NTSTATUS MmReadFromSwapPage(SWAPENTRY SwapEntry, PMDL Mdl)
|
|||
LARGE_INTEGER file_offset;
|
||||
IO_STATUS_BLOCK Iosb;
|
||||
NTSTATUS Status;
|
||||
KEVENT Event;
|
||||
|
||||
if (SwapEntry == 0)
|
||||
{
|
||||
|
@ -186,12 +193,17 @@ NTSTATUS MmReadFromSwapPage(SWAPENTRY SwapEntry, PMDL Mdl)
|
|||
}
|
||||
|
||||
file_offset.QuadPart = offset * 4096;
|
||||
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageRead(PagingFileList[i]->FileObject,
|
||||
Mdl,
|
||||
&file_offset,
|
||||
&Iosb,
|
||||
TRUE);
|
||||
&Event,
|
||||
&Iosb);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
return(Iosb.Status);
|
||||
}
|
||||
return(Status);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: section.c,v 1.93 2002/08/27 06:40:32 hbirr Exp $
|
||||
/* $Id: section.c,v 1.94 2002/08/28 07:13:04 hbirr Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: ntoskrnl/mm/section.c
|
||||
|
@ -323,6 +323,7 @@ MiReadPage(PMEMORY_AREA MemoryArea,
|
|||
PMDL Mdl;
|
||||
NTSTATUS Status;
|
||||
PREACTOS_COMMON_FCB_HEADER Fcb;
|
||||
KEVENT Event;
|
||||
|
||||
FileObject = MemoryArea->Data.SectionData.Section->FileObject;
|
||||
Fcb = (PREACTOS_COMMON_FCB_HEADER)FileObject->FsContext;
|
||||
|
@ -399,11 +400,18 @@ MiReadPage(PMEMORY_AREA MemoryArea,
|
|||
/*
|
||||
* Call the FSD to read the page
|
||||
*/
|
||||
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoPageRead(FileObject,
|
||||
Mdl,
|
||||
Offset,
|
||||
&IoStatus,
|
||||
TRUE);
|
||||
&Event,
|
||||
&IoStatus);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
return(IoStatus.Status);
|
||||
}
|
||||
return(Status);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue