mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +00:00
[NTOS:CC] Rewrite the non-cached path of CcZeroData
This commit is contained in:
parent
36e18aab35
commit
7f47f03296
1 changed files with 19 additions and 16 deletions
|
@ -759,25 +759,25 @@ CcZeroData (
|
|||
PMDL Mdl;
|
||||
ULONG i;
|
||||
ULONG CurrentLength;
|
||||
PPFN_NUMBER PfnArray;
|
||||
|
||||
Mdl = _alloca(MmSizeOfMdl(NULL, MAX_ZERO_LENGTH));
|
||||
/* Setup our Mdl */
|
||||
Mdl = IoAllocateMdl(NULL, min(Length, MAX_ZERO_LENGTH), FALSE, FALSE, NULL);
|
||||
if (!Mdl)
|
||||
ExRaiseStatus(STATUS_INSUFFICIENT_RESOURCES);
|
||||
|
||||
PfnArray = MmGetMdlPfnArray(Mdl);
|
||||
for (i = 0; i < BYTES_TO_PAGES(Mdl->ByteCount); i++)
|
||||
PfnArray[i] = CcZeroPage;
|
||||
Mdl->MdlFlags |= MDL_PAGES_LOCKED;
|
||||
|
||||
/* Perform the write sequencially */
|
||||
while (Length > 0)
|
||||
{
|
||||
if (Length + WriteOffset.QuadPart % PAGE_SIZE > MAX_ZERO_LENGTH)
|
||||
{
|
||||
CurrentLength = MAX_ZERO_LENGTH - WriteOffset.QuadPart % PAGE_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentLength = Length;
|
||||
}
|
||||
MmInitializeMdl(Mdl, (PVOID)(ULONG_PTR)WriteOffset.QuadPart, CurrentLength);
|
||||
Mdl->MdlFlags |= MDL_PAGES_LOCKED;
|
||||
for (i = 0; i < ((Mdl->Size - sizeof(MDL)) / sizeof(ULONG)); i++)
|
||||
{
|
||||
((PPFN_NUMBER)(Mdl + 1))[i] = CcZeroPage;
|
||||
}
|
||||
CurrentLength = min(Length, MAX_ZERO_LENGTH);
|
||||
|
||||
Mdl->ByteCount = CurrentLength;
|
||||
|
||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||
Status = IoSynchronousPageWrite(FileObject, Mdl, &WriteOffset, &Event, &Iosb);
|
||||
if (Status == STATUS_PENDING)
|
||||
|
@ -791,12 +791,15 @@ CcZeroData (
|
|||
}
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return FALSE;
|
||||
IoFreeMdl(Mdl);
|
||||
ExRaiseStatus(Status);
|
||||
}
|
||||
WriteOffset.QuadPart += CurrentLength;
|
||||
Length -= CurrentLength;
|
||||
}
|
||||
|
||||
IoFreeMdl(Mdl);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue