mirror of
https://github.com/reactos/reactos.git
synced 2025-01-04 05:20:54 +00:00
[NTOSKRNL]
Don't call MmBuildMdlForNonPagedPool in CcWriteVirtualAddress(): - BaseAddress comes from PagedPood - Windows returns a locked MDL from paged pool - See tests from r75833 that are getting fixed with that revision This fixes assertions failures on BtrFS write. CORE-13763 CORE-13769 svn path=/trunk/; revision=75834
This commit is contained in:
parent
d7718b4d51
commit
662241cc75
1 changed files with 23 additions and 7 deletions
|
@ -147,14 +147,30 @@ CcWriteVirtualAddress (
|
|||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
MmBuildMdlForNonPagedPool(Mdl);
|
||||
Mdl->MdlFlags |= MDL_IO_PAGE_READ;
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoSynchronousPageWrite(Vacb->SharedCacheMap->FileObject, Mdl, &Vacb->FileOffset, &Event, &IoStatus);
|
||||
if (Status == STATUS_PENDING)
|
||||
|
||||
Status = STATUS_SUCCESS;
|
||||
_SEH2_TRY
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = IoStatus.Status;
|
||||
MmProbeAndLockPages(Mdl, KernelMode, IoReadAccess);
|
||||
}
|
||||
_SEH2_EXCEPT (EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
Status = _SEH2_GetExceptionCode();
|
||||
KeBugCheck(CACHE_MANAGER);
|
||||
} _SEH2_END;
|
||||
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
Mdl->MdlFlags |= MDL_IO_PAGE_READ;
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoSynchronousPageWrite(Vacb->SharedCacheMap->FileObject, Mdl, &Vacb->FileOffset, &Event, &IoStatus);
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
|
||||
Status = IoStatus.Status;
|
||||
}
|
||||
|
||||
MmUnlockPages(Mdl);
|
||||
}
|
||||
IoFreeMdl(Mdl);
|
||||
if (!NT_SUCCESS(Status) && (Status != STATUS_END_OF_FILE))
|
||||
|
|
Loading…
Reference in a new issue