-/* $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
LARGE_INTEGER SegOffset;
NTSTATUS Status;
ULONG TempLength;
+ KEVENT Event;
Status = CcRosGetCacheSegmentChain(Bcb, ReadOffset, Length, &head);
if (!NT_SUCCESS(Status))
* 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)
NTSTATUS Status;
LARGE_INTEGER SegOffset;
IO_STATUS_BLOCK IoStatus;
+ KEVENT Event;
SegOffset.QuadPart = CacheSeg->FileOffset;
Size = CacheSeg->Bcb->AllocationSize.QuadPart - CacheSeg->FileOffset;
}
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);
NTSTATUS Status;
IO_STATUS_BLOCK IoStatus;
LARGE_INTEGER SegOffset;
+ KEVENT Event;
CacheSeg->Dirty = FALSE;
SegOffset.QuadPart = CacheSeg->FileOffset;
}
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);
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,
{
((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);
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))
}
/* 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);
* 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
LARGE_INTEGER file_offset;
IO_STATUS_BLOCK Iosb;
NTSTATUS Status;
+ KEVENT Event;
if (SwapEntry == 0)
{
}
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);
}
LARGE_INTEGER file_offset;
IO_STATUS_BLOCK Iosb;
NTSTATUS Status;
+ KEVENT Event;
if (SwapEntry == 0)
{
}
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);
}
* 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
PMDL Mdl;
NTSTATUS Status;
PREACTOS_COMMON_FCB_HEADER Fcb;
+ KEVENT Event;
FileObject = MemoryArea->Data.SectionData.Section->FileObject;
Fcb = (PREACTOS_COMMON_FCB_HEADER)FileObject->FsContext;
/*
* 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);
}
}