mirror of
https://github.com/reactos/reactos.git
synced 2025-06-28 03:49:42 +00:00
[NTOS/CC] Be more precise when notifying Mm about dirty pages
This commit is contained in:
parent
c295d6b229
commit
c74cbf0c0b
3 changed files with 15 additions and 3 deletions
|
@ -586,6 +586,11 @@ CcCopyWrite (
|
||||||
Buffer = (PVOID)((ULONG_PTR)Buffer + VacbLength);
|
Buffer = (PVOID)((ULONG_PTR)Buffer + VacbLength);
|
||||||
CurrentOffset += VacbLength;
|
CurrentOffset += VacbLength;
|
||||||
Length -= VacbLength;
|
Length -= VacbLength;
|
||||||
|
|
||||||
|
/* Tell Mm */
|
||||||
|
Status = MmMakePagesDirty(NULL, Add2Ptr(Vacb->BaseAddress, VacbOffset), VacbLength);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
ExRaiseStatus(Status);
|
||||||
}
|
}
|
||||||
_SEH2_FINALLY
|
_SEH2_FINALLY
|
||||||
{
|
{
|
||||||
|
@ -829,6 +834,11 @@ CcZeroData (
|
||||||
|
|
||||||
WriteOffset.QuadPart += VacbLength;
|
WriteOffset.QuadPart += VacbLength;
|
||||||
Length -= VacbLength;
|
Length -= VacbLength;
|
||||||
|
|
||||||
|
/* Tell Mm */
|
||||||
|
Status = MmMakePagesDirty(NULL, Add2Ptr(Vacb->BaseAddress, VacbOffset), VacbLength);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
ExRaiseStatus(Status);
|
||||||
}
|
}
|
||||||
_SEH2_FINALLY
|
_SEH2_FINALLY
|
||||||
{
|
{
|
||||||
|
|
|
@ -540,6 +540,11 @@ CcSetDirtyPinnedData (
|
||||||
CCTRACE(CC_API_DEBUG, "Bcb=%p Lsn=%p\n",
|
CCTRACE(CC_API_DEBUG, "Bcb=%p Lsn=%p\n",
|
||||||
Bcb, Lsn);
|
Bcb, Lsn);
|
||||||
|
|
||||||
|
/* Tell Mm */
|
||||||
|
MmMakePagesDirty(NULL,
|
||||||
|
Add2Ptr(iBcb->Vacb->BaseAddress, iBcb->PFCB.MappedFileOffset.QuadPart - iBcb->Vacb->FileOffset.QuadPart),
|
||||||
|
iBcb->PFCB.MappedLength);
|
||||||
|
|
||||||
if (!iBcb->Vacb->Dirty)
|
if (!iBcb->Vacb->Dirty)
|
||||||
{
|
{
|
||||||
CcRosMarkDirtyVacb(iBcb->Vacb);
|
CcRosMarkDirtyVacb(iBcb->Vacb);
|
||||||
|
|
|
@ -420,9 +420,6 @@ CcRosMarkDirtyVacb (
|
||||||
CcScheduleLazyWriteScan(FALSE);
|
CcScheduleLazyWriteScan(FALSE);
|
||||||
}
|
}
|
||||||
KeReleaseQueuedSpinLock(LockQueueMasterLock, oldIrql);
|
KeReleaseQueuedSpinLock(LockQueueMasterLock, oldIrql);
|
||||||
|
|
||||||
/* Tell Mm */
|
|
||||||
MmMakePagesDirty(NULL, Vacb->BaseAddress, Length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue