[NTOSKRNL] Fix lazy writer for in-use VACB.
authorPierre Schweitzer <pierre@reactos.org>
Sun, 29 Apr 2018 18:34:28 +0000 (20:34 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 29 Apr 2018 18:42:53 +0000 (20:42 +0200)
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

ntoskrnl/cc/pin.c
ntoskrnl/cc/view.c

index d81f09d..2d48a27 100644 (file)
@@ -275,6 +275,10 @@ CcSetDirtyPinnedData (
         Bcb, Lsn);
 
     iBcb->Dirty = TRUE;
+    if (!iBcb->Vacb->Dirty)
+    {
+        CcRosMarkDirtyVacb(iBcb->Vacb);
+    }
 }
 
 
index c2b8913..e1d0643 100644 (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);