diff --git a/ntoskrnl/cc/pin.c b/ntoskrnl/cc/pin.c index d81f09d4701..2d48a27a0aa 100644 --- a/ntoskrnl/cc/pin.c +++ b/ntoskrnl/cc/pin.c @@ -275,6 +275,10 @@ CcSetDirtyPinnedData ( Bcb, Lsn); iBcb->Dirty = TRUE; + if (!iBcb->Vacb->Dirty) + { + CcRosMarkDirtyVacb(iBcb->Vacb); + } } diff --git a/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c index c2b89131323..e1d064312ff 100644 --- a/ntoskrnl/cc/view.c +++ b/ntoskrnl/cc/view.c @@ -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);