[NTOSKRNL] Reimplement the lazy writer in Cc and remove the "basic" one in Mm.
authorPierre Schweitzer <pierre@reactos.org>
Tue, 23 Jan 2018 18:07:25 +0000 (19:07 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Tue, 23 Jan 2018 18:33:59 +0000 (19:33 +0100)
commitc7ad200f8bc1b40c6ed942176eb43d0a04bfaf8a
tree56d53d117e62f75c6a7475c117196ecf7dfee478
parent2382435e884e117577e899374c9f38d9312e085e
[NTOSKRNL] Reimplement the lazy writer in Cc and remove the "basic" one in Mm.
This removes the "modified page writer" thread in Mm that was regularly blindly
attempting to flush dirty pages to the disk.
Instead, this commit introduces a lazy writer that will monitor dirty pages count
and will flush them to disk when this count is above a threshold. The threshold is
computed on Cc init.
Compared to what was done previously, this lazy writer will only write down files
that are not marked as temporary.
The mechanisms involved in this lazy writer worker are well described in Windows
Internals 4th editions (constants are coming from it ;-)).
Also fixed a bad (and old!) bug in CcRosFlushDirtyPages() where target count could
be overflow and the function would spin forever while holding the VACBs lock. This is
mandatory as now lazy writer will call it with "random" values.
This also allows implementing CcWaitForCurrentLazyWriterActivity() :-).
Also renamed DirtyPageCount to its MS equivalent.

CORE-14235
ntoskrnl/cache/newcc.h
ntoskrnl/cc/cacheman.c
ntoskrnl/cc/copy.c
ntoskrnl/cc/fs.c
ntoskrnl/cc/view.c
ntoskrnl/include/internal/cc.h
ntoskrnl/mm/mminit.c
ntoskrnl/po/poshtdwn.c
ntoskrnl/po/power.c