[NTOSKRNL] Fix lazy writer for in-use VACB.

Adjusting refcount and enabling lazy-write for pinned
VACB makes it actually more efficient, often purging
data to disk, reducing memory stress for the system.

This is required for defering writes.

This commit unfortunately (?) reverts a previous revert.

CORE-12081
CORE-14582
CORE-14313
This commit is contained in:
Pierre Schweitzer 2018-04-29 20:34:28 +02:00
parent 3055afce81
commit f2c44aa483
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B
2 changed files with 9 additions and 1 deletions

View file

@ -275,6 +275,10 @@ CcSetDirtyPinnedData (
Bcb, Lsn);
iBcb->Dirty = TRUE;
if (!iBcb->Vacb->Dirty)
{
CcRosMarkDirtyVacb(iBcb->Vacb);
}
}

View file

@ -205,6 +205,8 @@ CcRosFlushDirtyPages (
while ((current_entry != &DirtyVacbListHead) && (Target > 0))
{
ULONG Refs;
current = CONTAINING_RECORD(current_entry,
ROS_VACB,
DirtyVacbListEntry);
@ -231,7 +233,9 @@ CcRosFlushDirtyPages (
ASSERT(current->Dirty);
/* One reference is added above */
if (CcRosVacbGetRefCount(current) > 2)
Refs = CcRosVacbGetRefCount(current);
if ((Refs > 3 && current->PinCount == 0) ||
(Refs > 4 && current->PinCount > 1))
{
current->SharedCacheMap->Callbacks->ReleaseFromLazyWrite(
current->SharedCacheMap->LazyWriteContext);